Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.
This integration allows event-driven systems to use Elasticsearch’s search and analytics capabilities for real-time processing and retrieval of event data.
Elasticsearch is a highly scalable open-source search and analytics engine built on top of the Apache Lucene library. It is designed to handle a wide range of data types and is particularly well-suited for real-time search and data analysis use cases. Elasticsearch provides a distributed, document-oriented architecture, making it capable of handling large volumes of structured, semi-structured, and unstructured data.
At its core, Elasticsearch operates as a distributed search engine, allowing you to store, search, and retrieve large amounts of data in near real-time. It uses a schema-less JSON-based document model, where data is organized into indices, which can be thought of as databases. Within an index, documents are stored, indexed, and made searchable based on their fields. Elasticsearch also provides advanced querying capabilities, allowing you to perform complex searches, filter data, and aggregate results.
One of the key features of Elasticsearch is its distributed nature. It supports automatic data sharding, replication, and node clustering, which enables it to handle massive amounts of data across multiple servers or nodes. This distributed architecture provides high availability and fault tolerance, ensuring that data remains accessible even in the event of hardware failures or network issues.Elasticsearch integrates with various programming languages and frameworks through its comprehensive RESTful API. It also provides official clients for popular languages like Java, Python, and JavaScript, enabling you to interact with the search engine in your preferred development environment.
Indexing refers to the process of adding, updating, or deleting documents in Elasticsearch. It involves taking data, typically in JSON format, and transforming it into indexed documents within an index. Each document represents a data record and contains fields with corresponding values. Elasticsearch uses an inverted index data structure to efficiently map terms or keywords to the documents containing those terms. This enables fast full-text search capabilities and retrieval of relevant documents.
Sharding, on the other hand, is the practice of dividing index data into multiple smaller subsets called shards. Each shard is an independent, self-contained index that holds a portion of the data. By distributing data across multiple shards, Elasticsearch achieves horizontal scalability and improved performance. Sharding allows Elasticsearch to handle large amounts of data by parallelizing search and indexing operations across multiple nodes or servers.Shards can be configured as primary or replica shards. Primary shards contain the original data, while replica shards are exact copies of the primary shards, providing redundancy and high availability. By having multiple replicas, Elasticsearch ensures data durability and fault tolerance. Replicas also enable parallel search operations, increasing search throughput.Sharding offers several advantages. It allows data to be distributed across multiple nodes, enabling parallel processing and faster search operations. It also provides fault tolerance, as data is replicated across multiple shards. Additionally, sharding allows Elasticsearch to scale horizontally by adding more nodes and distributing the data across them.The number of shards and their allocation can be determined during index creation or modified later. Consider factors such as the size of the dataset, hardware resources, and search performance requirements when deciding on the number of shards.For more details, check Elasticsearch documentation:
Using Elasticsearch for advanced indexing with FlowX.AI
The integration between FlowX.AI and Elasticsearch involves the indexing of specific keys or data from the UI Designer to process definitions. The indexing process is initiated by the FlowX Engine which sends the data to Elasticsearch, where data is then indexed in the “process_instance” index.There are two methods available for indexing data: Kafka and HTTP.
HTTP: Data is indexed by establishing a direct connection from the FlowX Engine to Elasticsearch. Use HTTP calls to connect directly from the FlowX Engine to Elasticsearch.
To ensure effective indexing of process instances’ details, a crucial step involves defining a mapping that specifies how Elasticsearch should index the received messages. This mapping is essential as the process instances’ details often have specific formats. The process-engine takes care of this by automatically creating an index template during startup if it doesn’t already exist. The index template acts as a blueprint, providing Elasticsearch with the necessary instructions on how to index and organize the incoming data accurately. By establishing and maintaining an appropriate index template, the integration between FLOWX.AI and Elasticsearch can index and retrieve process instance information in a structured manner.
Kafka transport strategy implies process-engine sending messages to a Kafka topic whenever there is data from a process instance to be indexed. Kafka Connect is then configured to read these messages from the topic and forward them to Elasticsearch for indexing.This approach offers benefits such as fire-and-forget communication, where the process-engine no longer needs to spend time handling indexing requests. By decoupling the process-engine from the indexing process and using Kafka as a messaging system, the overall system becomes more efficient and scalable. The process-engine can focus on its core responsibilities, while Kafka Connect takes care of transferring the messages to Elasticsearch for indexing.To optimize indexing response time, Elasticsearch utilizes multiple indices created dynamically by the Kafka Connect connector. The creation of indices is based on the timestamp of the messages received in the Kafka topic. The frequency of index creation, such as per minute, hour, week, or month, is determined by the timestamp format configuration of the Kafka connector.It’s important to note that the timestamp used for indexing is the process instance’s start date. This means that subsequent updates received for the same object will be directed to the original index for that process instance. To ensure proper identification and indexing, it is crucial that the timestamp of the message in the Kafka topic corresponds to the process instance’s start date, while the key of the message aligns with the process instance’s UUID. These two elements serve as unique identifiers for determining the index in which a process instance object was originally indexed.For more details on how to configure process instance indexing through Kafka transport, check the following section:
Configuring Elasticsearch indexing
Configuration guidelines
Last modified on October 30, 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FlowX.AI","description":"Comprehensive documentation for FlowX.AI, the AI-driven process automation platform.","colors":{"primary":"#fcb813","light":"#fcb813","dark":"#fcb813"},"logo":{"light":"https://mintcdn.com/flowxai/38fXEM0a7v86Lg2m/logo/light.png?fit=max\u0026auto=format\u0026n=38fXEM0a7v86Lg2m\u0026q=85\u0026s=d767c06cef433b0a02f40a1f4f785eab","dark":"https://mintcdn.com/flowxai/38fXEM0a7v86Lg2m/logo/dark.png?fit=max\u0026auto=format\u0026n=38fXEM0a7v86Lg2m\u0026q=85\u0026s=6b8b8c3e7abd17acf6be8bffce4e599d"},"favicon":"https://mintcdn.com/flowxai/VVxnbzjz7JuL1Ngt/favicon2.svg?fit=max\u0026auto=format\u0026n=VVxnbzjz7JuL1Ngt\u0026q=85\u0026s=ef6a780a1ed3894c7b276bcc7b3c6c69","appearance":{"default":"dark","strict":false},"background":{"decoration":"grid","color":{"light":"#f4f4f5","dark":"#0a0b0d"}},"navbar":{"links":[],"primary":{"type":"button","label":"Academy","href":"https://academy.flowx.ai/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/flowxai","x":"https://x.com/FlowX_ai","youtube":"https://www.youtube.com/@FlowX_AI"},"links":[{"header":"Documentation","items":[{"label":"Introduction","href":"https://docs.flowx.ai/5.9/docs/introduction"},{"label":"Platform overview","href":"https://docs.flowx.ai/5.9/docs/platform-overview/flowx-architecture"},{"label":"Designer","href":"https://docs.flowx.ai/5.9/docs/flowx-designer/overview"},{"label":"AI Platform","href":"https://docs.flowx.ai/5.9/ai-platform/ai-in-flowx"},{"label":"Use the docs with AI","href":"https://docs.flowx.ai/5.9/docs/getting-started/using-flowx-docs-with-ai"},{"label":"Release notes","href":"https://docs.flowx.ai/release-notes/overview"}]},{"header":"Resources","items":[{"label":"FlowX.AI Academy","href":"https://academy.flowx.ai"},{"label":"Support","href":"https://flowxai.zendesk.com/"}]},{"header":"Company","items":[{"label":"About FlowX.AI","href":"https://www.flowx.ai/about"},{"label":"Contact us","href":"mailto:hello@flowx.ai"},{"label":"Careers","href":"https://apply.workable.com/flowxai"}]},{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://www.flowx.ai/privacy-policy"},{"label":"Cookie Policy","href":"https://www.flowx.ai/cookie-policy"},{"label":"Terms and Conditions","href":"https://www.flowx.ai/terms-and-conditions"}]}]},"search":{"prompt":"Search the docs"},"seo":{"metatags":{"zd-site-verification":"94tteg5ir5of8gkb4twzh"}},"fonts":{"heading":{"family":"Sora"},"body":{"family":"Geist"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":true},"integrations":{"ga4":{"measurementId":"G-CGW0FVK9YM"}},"banner":{"content":"🚀 [See the latest FlowX.AI releases →](/release-notes/overview)","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"flowxai","hasAudioNarration":false,"actualSubdomain":"flowxai","customDomains":["docs.flowx.ai"],"gitSource":{"type":"github","owner":"flowx-ai","repo":"flowx-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4c8fd7f8a500a1fd86923","collectionId":"f43bb162-8d91-4fce-8112-9a85f1f82724","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4c8fd7f8a500a1fd86923"},"feedback":{"thumbs":true,"contextualFeedback":{"allowEmail":true},"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4c8fd7f8a500a1fd86923","clientVersion":"0.0.4039","searchFilterCounts":[{"language":"default","tag":"Documentation","count":787},{"language":"default","tag":"Building blocks","count":329},{"language":"default","tag":"Platform deep dive","count":257},{"language":"default","tag":"Setup guides","count":191},{"language":"default","tag":"UI Designer","count":140},{"language":"default","tag":"Release notes","count":137},{"language":"default","tag":"Release Notes","count":137},{"language":"default","tag":"Microservices","count":112},{"language":"default","tag":"Core extensions","count":107},{"language":"default","tag":"Nodes","count":88}],"searchSettings":{"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"email","email":"learning.team@flowx.ai","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":true},"customCss":[{"filePath":"custom.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@keyframes fxh-tick-pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes fxh-caret-blink{50%{opacity:0}}@keyframes fxh-ln-in{to{opacity:1;transform:none}}@keyframes fxh-rv-in{to{opacity:1;transform:none}}@keyframes fxl-stack-ride{0%{top:0;opacity:0}4%{opacity:1}52%{top:calc(100% - 7px);opacity:1}58%,to{top:calc(100% - 7px);opacity:0}}@keyframes fxl-stack-lit{0%,2%,30%,to{color:var(--fxl-faint)}18%,6%{color:var(--fxl-text)}}@keyframes fxl-stack-tick{0%,2%,30%,to{background:var(--fxl-line)}18%,6%{background:#fcb813}}code,kbd,pre,samp{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace}#topbar-cta-button{color:#131007!important}.label-version{display:inline-block;font-weight:700;color:#fff;background-color:#007bff;padding:.5px 15px;border-radius:12px;box-shadow:0 2px 4px rgba(0,0,0,.1);font-size:.9em;text-transform:uppercase;letter-spacing:.5px;margin-right:5px;transition:background-color .3s ease;text-decoration:none}.label-version:hover{background-color:#0056b3}#banner{background:linear-gradient(90deg,#0a0b0d 0,#0e1013 55%,#2a2310 100%)!important;border-bottom:1px solid rgba(252,184,19,.3);backdrop-filter:saturate(120%)}#banner a{color:#fcb813!important;text-decoration-color:rgba(252,184,19,.55)!important;transition:opacity .2s ease}#banner a:hover{opacity:.85}:root{--flowx-yellow-50:#fff8e7;--flowx-yellow-200:#ffdf92;--flowx-yellow-400:#ffc739;--flowx-yellow-500:#fcb813;--flowx-yellow-800:#8a5e00;--flowx-yellow-900:#6b4e08;--flowx-neutrals-50:#f7f8f9;--flowx-neutrals-100:#e3e8ed;--flowx-neutrals-200:#cbd1db;--flowx-neutrals-300:#a6b0be;--flowx-neutrals-400:#8390a2;--flowx-neutrals-500:#64748b;--flowx-neutrals-700:#475263;--flowx-neutrals-800:#2a313a;--flowx-neutrals-900:#1d232c;--flowx-blue-50:#e6f0fb;--flowx-blue-200:#8abbed;--flowx-blue-700:#004c99;--flowx-blue-900:#002d5b;--flowx-elevation-m:0 8px 16px #1634621a}.cb-wrap{margin-top:32px}.cb-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:24px}.cb-filters input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cb-filters label{cursor:pointer;user-select:none;font-size:12px;line-height:16px;font-weight:600;padding:8px 16px;border-radius:120px;border:1px solid var(--flowx-neutrals-200);color:var(--flowx-neutrals-500);background:0 0;transition:border-color .15s ease,background .15s ease,color .15s ease}.cb-filters label span{margin-left:6px;opacity:.55;font-variant-numeric:tabular-nums}.cb-filters label:hover{border-color:var(--flowx-yellow-500);color:var(--flowx-neutrals-900)}.cb-filters input:checked+label,.dark .cb-filters input:checked+label{background:var(--flowx-yellow-500);border-color:var(--flowx-yellow-500);color:var(--flowx-neutrals-900)}.cb-filters input:focus-visible+label{outline:2px solid var(--flowx-yellow-500);outline-offset:2px}.dark .cb-filters label{border-color:var(--flowx-neutrals-700);color:var(--flowx-neutrals-400)}.dark .cb-filters label:hover{border-color:var(--flowx-yellow-400);color:var(--flowx-neutrals-50)}.cb-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}@media (max-width:1024px){.cb-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){.cb-grid{grid-template-columns:1fr}}.cb-wrap:has(#cb-conv:checked) .cb-card:not([data-f~=conversational]),.cb-wrap:has(#cb-cookbook:checked) .cb-card:not([data-f~=cookbook]),.cb-wrap:has(#cb-docs:checked) .cb-card:not([data-f~=docs]),.cb-wrap:has(#cb-guide:checked) .cb-card:not([data-f~=guide]),.cb-wrap:has(#cb-integr:checked) .cb-card:not([data-f~=integrations]),.cb-wrap:has(#cb-pattern:checked) .cb-card:not([data-f~=pattern]),.cb-wrap:has(#cb-tutorial:checked) .cb-card:not([data-f~=tutorial]),.cb-wrap:has(#cb-ui:checked) .cb-card:not([data-f~=ui]){display:none}.cb-card{position:relative;display:flex;flex-direction:column;gap:12px;padding:24px;border:1px solid var(--flowx-neutrals-100);border-radius:16px;background:0 0;text-decoration:none!important;transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease}.cb-card::after{content:\"\\2192\";position:absolute;top:20px;right:24px;font-size:14px;line-height:22px;color:var(--flowx-neutrals-300);transition:color .2s ease,transform .2s ease}.cb-card:hover{transform:translateY(-2px);border-color:var(--flowx-yellow-500);box-shadow:var(--flowx-elevation-m)}.cb-card:hover::after{color:var(--flowx-neutrals-900);transform:translateX(4px)}.dark .cb-card{border-color:var(--flowx-neutrals-800)}.dark .cb-card:hover{border-color:var(--flowx-yellow-400);box-shadow:0 8px 16px rgba(0,0,0,.4)}.dark .cb-card:hover::after,.dark .cb-foot a:hover{color:var(--flowx-yellow-400)}@media (prefers-reduced-motion:reduce){.cb-card,.cb-card::after{transition:none}.cb-card:hover,.cb-card:hover::after{transform:none}}.cb-tags{display:flex;flex-wrap:wrap;gap:6px;padding-right:24px}.cb-tag{font-size:10px;line-height:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:4px 8px;border-radius:4px;background:var(--flowx-neutrals-50);color:var(--flowx-neutrals-500)}.cb-tag-tut{background:var(--flowx-yellow-50);color:var(--flowx-yellow-800)}.cb-tag-pat{background:var(--flowx-neutrals-900);color:#fff}.cb-tag-cook{background:var(--flowx-yellow-500);color:var(--flowx-neutrals-900)}.cb-tag-gui{background:var(--flowx-blue-50);color:var(--flowx-blue-700)}.dark .cb-tag{background:var(--flowx-neutrals-800);color:var(--flowx-neutrals-400)}.dark .cb-tag-tut{background:var(--flowx-yellow-900);color:var(--flowx-yellow-200)}.dark .cb-tag-pat{background:var(--flowx-neutrals-50);color:var(--flowx-neutrals-900)}.dark .cb-tag-cook{background:var(--flowx-yellow-500);color:var(--flowx-neutrals-900)}.dark .cb-tag-gui{background:var(--flowx-blue-900);color:var(--flowx-blue-200)}.cb-foot a,.cb-title{font-weight:600;color:var(--flowx-neutrals-900)}.cb-title{display:block;font-size:14px;line-height:22px;letter-spacing:-.01em}.dark .cb-foot a,.dark .cb-title{color:var(--flowx-neutrals-50)}.cb-desc{display:block;font-size:12px;line-height:18px;font-weight:400;color:var(--flowx-neutrals-500)}.cb-foot span,.dark .cb-desc{color:var(--flowx-neutrals-400)}.cb-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:16px;margin-top:40px;padding-top:24px;border-top:1px solid var(--flowx-neutrals-100);font-size:12px;line-height:16px}.dark .cb-foot{border-top-color:var(--flowx-neutrals-800)}.dark .cb-foot span{color:var(--flowx-neutrals-500)}.cb-foot a{text-decoration:none;border-bottom:1px solid var(--flowx-yellow-500);padding-bottom:1px}.cb-foot a:hover{color:var(--flowx-yellow-800)}#content-area:has(.fxh-hero) #header{display:none}main#content-container:has(.fxh-hero){max-width:none}#content-area:has(.fxh-hero){width:100%!important}#content-area:has(.fxh-hero) #content{max-width:none;margin-top:0}#content-area:has(.fxh-hero) #content div[class*=\"--page-padding\"]{--page-padding:0px}#content-area:has(.fxh-hero) #content>:not(.fxh-hero){max-width:1360px;margin-left:auto;margin-right:auto}.fxh-hero{position:relative;text-align:center}@media (min-width:1024px){.fxh-hero{margin-top:-2.5rem}}.fxh-hero__bg{position:sticky;top:0;z-index:0;height:100dvh;overflow:clip;border-radius:18px;background:#0a0b0d;border:1px solid rgba(255,255,255,.08)}.fxh-hero__bg::after,.fxh-hero__bg::before{content:\"\";position:absolute;pointer-events:none}.fxh-hero__bg::before{inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse at 50% 0,#000 25%,transparent 75%);mask-image:radial-gradient(ellipse at 50% 0,#000 25%,transparent 75%)}.fxh-hero__bg::after{top:-45%;left:25%;width:50%;height:90%;background:radial-gradient(closest-side,rgba(252,184,19,.1),transparent 70%)}.fxh-hero__steps{position:relative;z-index:1;margin-top:-100dvh}.fxh-hero__step{position:relative;min-height:calc(100dvh - 9.5rem);display:grid;grid-template-columns:minmax(0,1fr);align-content:center;padding:48px clamp(24px,5vw,56px) 96px}.fxh-hero__step:not(:first-child){min-height:72dvh;padding-top:48px;padding-bottom:48px}.fxh-hero--single .fxh-hero__bg{position:absolute;inset:0;height:auto;z-index:0}.fxh-hero--single .fxh-hero__steps{margin-top:0}.fxh-hero--single .fxh-hero__step{min-height:calc(100dvh - 9.5rem)}.fxh-hero--slim .fxh-hero__step{min-height:min(46dvh,480px);padding-top:clamp(40px,6vh,64px);padding-bottom:clamp(40px,6vh,64px)}.fxh-step-title{display:block;font-family:\"Sora\",sans-serif;font-size:clamp(1.7rem,3.4vw,2.6rem);font-weight:700;letter-spacing:-.02em;line-height:1.1;color:#f5f5f0;max-width:20ch;margin:0 auto clamp(18px,3vh,28px)}.fxh-vs{display:flex;flex-wrap:wrap;justify-content:center;gap:clamp(9px,1.1vw,14px);max-width:min(780px,100%);margin:clamp(14px,3vh,30px) auto 0;padding:0;list-style:none}.fxh-vs li{display:flex;align-items:center;gap:12px;padding:11px clamp(18px,1.6vw,24px);border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.035);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:999px}.fxh-vs__no{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:rgba(255,255,255,.42)}.fxh-vs__name{font-family:\"Sora\",sans-serif;font-size:clamp(12.5px,1.1vw,15px);font-weight:600;letter-spacing:.01em;color:rgba(255,255,255,.9)}.fxh-scroll{position:absolute;bottom:clamp(20px,4vh,40px);left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:rgba(255,255,255,.42)}.fxh-scroll-line{width:1px;height:46px;background:linear-gradient(rgba(255,255,255,.45),transparent)}.fxh-eyebrow{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;display:inline-flex;align-items:center;gap:12px;font-size:13px;font-weight:400;letter-spacing:.22em;text-transform:uppercase;color:#a3a39a;margin-bottom:28px}.fxh-tick{display:inline-block;width:8px;height:8px;flex-shrink:0;background:#fcb813;animation:fxh-tick-pulse 2.6s ease-in-out infinite}.fxh-title{display:block;font-family:\"Sora\",sans-serif;font-weight:700;letter-spacing:-.02em;line-height:1.08;max-width:920px;margin:0 auto clamp(20px,3vh,28px);text-wrap:balance}.fxh-line{display:block;font-size:clamp(1.7rem,3.4vw,2.7rem);color:#f5f5f0}.fxh-line--dim{color:rgba(244,245,243,.58);margin-top:.06em}.fxh-amber{color:#fcb813}.fxh-sub{display:block;max-width:62ch;margin:0 auto clamp(20px,3vh,28px);font-size:15px;line-height:1.55;color:#b9b9b1}.fxh-cta,.fxh-ctas{justify-content:center}.fxh-ctas{display:flex;flex-wrap:wrap;gap:12px;position:relative}.fxh-cta{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;padding:12px 22px;border-radius:10px;font-size:15px;font-weight:550;text-decoration:none!important;transition:background .2s ease,border-color .2s ease,color .2s ease}.fxh-cta--primary{background:#fcb813;color:#131007!important;font-weight:640}.fxh-cta--primary:hover{background:#ffc739}.fxh-cta--ghost{border:1px solid rgba(255,255,255,.16);color:#f4f5f3!important}.fxh-cta--ghost:hover{border-color:rgba(255,255,255,.42);background:rgba(255,255,255,.04)}.fxh-term,.fxh-term__dots i{border:1px solid rgba(255,255,255,.12)}.fxh-term{position:relative;width:min(680px,100%);margin:clamp(24px,4vh,36px) auto clamp(22px,3.5vh,32px);text-align:left;border-radius:18px;overflow:hidden;background:linear-gradient(180deg,rgba(255,255,255,.1) 0,rgba(255,255,255,.03) 20%,rgba(255,255,255,.01) 60%,rgba(255,255,255,.045) 100%),rgba(10,11,13,.91);box-shadow:0 24px 60px rgba(0,0,0,.5)}.fxh-term__bar{display:flex;align-items:center;gap:16px;padding:14px 22px;font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;letter-spacing:.06em;color:rgba(255,255,255,.62);border-bottom:1px solid rgba(255,255,255,.12)}.fxh-term__dots{display:inline-flex;gap:7px}.fxh-term__dots i{width:11px;height:11px;border-radius:50%}.fxh-term__body{display:flex;flex-direction:column;gap:14px;padding:24px 26px 26px;font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px}.fxh-term__body p{margin:0;color:rgba(255,255,255,.72)}.fxh-term__prompt{color:#fcb813;margin-right:8px}.fxh-caret{display:inline-block;width:9px;height:1.05em;margin-left:6px;vertical-align:text-bottom;background:rgba(252,184,19,.85);animation:fxh-caret-blink 1.1s steps(1) infinite}.fxh-term__log{display:grid;gap:5px;align-content:start}.fxh-term__log:empty{display:none}.fxh-term__log .ln{display:flex;justify-content:space-between;gap:16px;font-size:12.5px;color:rgba(255,255,255,.58);opacity:0;transform:translateY(6px);animation:fxh-ln-in .45s cubic-bezier(.16,1,.3,1) forwards}.fxh-term__log .ok{color:#fcb813;margin-right:8px}.fxh-term__log .t,.fxh-term__ver{color:rgba(255,255,255,.34)}.fxh-term__ver{margin-left:auto}.fxh-field{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:.55}#footer a[href*=\"utm_campaign=poweredBy\"],.fxh-hero--live .fxh-hero__bg::before{display:none}.fxh-hero--live .fxh-hero__step:first-child .fxh-ctas,.fxh-hero--live .fxh-hero__step:first-child .fxh-eyebrow,.fxh-hero--live .fxh-hero__step:first-child .fxh-scroll,.fxh-hero--live .fxh-hero__step:first-child .fxh-sub,.fxh-hero--live .fxh-hero__step:first-child .fxh-title{opacity:0;transform:translateY(26px);animation:fxh-rv-in .9s cubic-bezier(.16,1,.3,1) forwards}.fxh-hero--live .fxh-hero__step:first-child .fxh-eyebrow{animation-delay:.15s}.fxh-hero--live .fxh-hero__step:first-child .fxh-title{animation-delay:.26s}.fxh-hero--live .fxh-hero__step:first-child .fxh-sub{animation-delay:.48s}.fxh-hero--live .fxh-hero__step:first-child .fxh-ctas{animation-delay:.59s}.fxh-hero--live .fxh-hero__step:first-child .fxh-scroll{animation-delay:.92s}@media (max-width:640px){.fxh-hero__step{padding:72px 20px}}@media (prefers-reduced-motion:reduce){.fxh-caret,.fxh-tick{animation:none}.fxh-hero--live .fxh-hero__step:first-child .fxh-ctas,.fxh-hero--live .fxh-hero__step:first-child .fxh-eyebrow,.fxh-hero--live .fxh-hero__step:first-child .fxh-scroll,.fxh-hero--live .fxh-hero__step:first-child .fxh-sub,.fxh-hero--live .fxh-hero__step:first-child .fxh-title{animation:none;opacity:1;transform:none}}.cb-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (max-width:640px){.cb-grid--2{grid-template-columns:1fr}}:root{--fxl-mono:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;--fxl-display:\"Sora\", sans-serif;--fxl-ease:cubic-bezier(0.16, 1, 0.3, 1);--fxl-text:#17181b;--fxl-dim:rgba(23, 24, 27, 0.64);--fxl-faint:rgba(23, 24, 27, 0.44);--fxl-line:rgba(24, 24, 27, 0.12);--fxl-line-soft:rgba(24, 24, 27, 0.07);--fxl-amber-text:#8a5e00;--fxl-bg:#f4f4f5;--fxl-panel:#fcfcfd;--fxl-amber-soft:rgba(252, 184, 19, 0.12)}.dark{--fxl-text:#f4f5f3;--fxl-dim:rgba(244, 245, 243, 0.58);--fxl-faint:rgba(244, 245, 243, 0.34);--fxl-line:rgba(255, 255, 255, 0.08);--fxl-line-soft:rgba(255, 255, 255, 0.05);--fxl-amber-text:#fcb813;--fxl-bg:#0a0b0d;--fxl-panel:#0c0e11;--fxl-amber-soft:rgba(252, 184, 19, 0.08)}.fxl-no{display:flex;align-items:center;gap:12px;font-family:var(--fxl-mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--fxl-faint);margin-top:8px}.fxl-no::after{content:\"\";flex:1;height:1px;background:var(--fxl-line-soft)}.fxl-no+h2{margin-top:10px}.fxl-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--fxl-line);border:1px solid var(--fxl-line);border-radius:16px;overflow:hidden}.fxl-cell{position:relative;display:block;background:var(--fxl-panel);padding:clamp(24px,2.6vw,34px);text-decoration:none!important;transition:background .2s ease}.fxl-cell:hover{background:var(--fxl-amber-soft)}.fxl-cell::after{content:\"\\2192\";position:absolute;top:24px;right:26px;font-family:var(--fxl-mono);font-size:14px;color:var(--fxl-faint);transition:color .2s ease,transform .2s ease}.fxl-cell:hover::after{color:var(--fxl-amber-text);transform:translateX(4px)}.fxl-cell__no{display:block;font-family:var(--fxl-mono);font-size:11px;letter-spacing:.2em;color:var(--fxl-amber-text);margin-bottom:14px}.fxl-cell__title{display:block;font-family:var(--fxl-display);font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--fxl-text);margin-bottom:6px}.fxl-cell__desc{display:block;font-size:13.5px;line-height:1.5;color:var(--fxl-dim);max-width:46ch}.fxl-grid--1{grid-template-columns:1fr}.fxl-grid--3{grid-template-columns:repeat(3,1fr)}@media (max-width:1024px){.fxl-grid--3{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.fxl-grid,.fxl-grid--3{grid-template-columns:1fr}}.fxl-cell--eval{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:32px;align-items:center}.fxl-cell--eval::after{content:none}.fxl-cell--eval:hover{background:var(--fxl-panel)}.fxl-eval__links{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:18px}.fxl-eval__links a,.fxl-stack{font-family:var(--fxl-mono);font-size:12px}.fxl-eval__links a{color:var(--fxl-amber-text);text-decoration:none!important;border-bottom:1px solid rgba(252,184,19,.45);padding-bottom:1px}.fxl-eval__links a:hover{border-bottom-color:var(--fxl-amber-text)}.fxl-stack{color:var(--fxl-faint)}.fxl-stack__row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 12px 7px 30px;border-bottom:1px solid var(--fxl-line-soft)}.fxl-rails li:last-child,.fxl-stack__row:last-child{border-bottom:none}.fxl-stack__row span:last-child{font-size:10.5px;letter-spacing:.08em;opacity:.8}.fxl-stack__tick{position:absolute;left:10px;top:50%;width:7px;height:7px;margin-top:-3.5px;border-radius:2px;background:var(--fxl-line)}.fxl-stack__client{border:1px solid var(--fxl-line);border-radius:10px;color:var(--fxl-dim)}.fxl-stack__client .fxl-stack__tick{background:#fcb813}.fxl-stack__gw{display:flex;align-items:center;gap:10px;padding:10px 0 10px 30px;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase}.fxl-stack__gw::after{content:\"\";flex:1;height:1px;background:repeating-linear-gradient(90deg,var(--fxl-line) 0 4px,transparent 4px 8px)}.fxl-stack__svc{position:relative;border:1px solid var(--fxl-line);border-radius:10px;overflow:hidden}.fxl-stack__spine{position:absolute;left:13px;top:0;bottom:0;width:1px;background:var(--fxl-line)}.fxl-stack__pulse{position:absolute;left:10px;top:0;width:7px;height:7px;border-radius:50%;background:#fcb813;box-shadow:0 0 0 4px rgba(252,184,19,.18);opacity:0;animation:fxl-stack-ride 6.6s linear infinite}.fxl-stack__svc .fxl-stack__row,.fxl-stack__svc .fxl-stack__tick{animation:6.6s linear infinite}.fxl-stack__svc .fxl-stack__row{animation-name:fxl-stack-lit}.fxl-stack__svc .fxl-stack__tick{animation-name:fxl-stack-tick}.fxl-stack__svc .fxl-stack__row:nth-child(4),.fxl-stack__svc .fxl-stack__row:nth-child(4) .fxl-stack__tick{animation-delay:.55s}.fxl-stack__svc .fxl-stack__row:nth-child(5),.fxl-stack__svc .fxl-stack__row:nth-child(5) .fxl-stack__tick{animation-delay:1.1s}.fxl-stack__svc .fxl-stack__row:nth-child(6),.fxl-stack__svc .fxl-stack__row:nth-child(6) .fxl-stack__tick{animation-delay:1.65s}.fxl-stack__svc .fxl-stack__row:nth-child(7),.fxl-stack__svc .fxl-stack__row:nth-child(7) .fxl-stack__tick{animation-delay:2.2s}.fxl-stack__svc .fxl-stack__row:nth-child(8),.fxl-stack__svc .fxl-stack__row:nth-child(8) .fxl-stack__tick{animation-delay:2.75s}.fxl-stack__foot{display:flex;justify-content:space-between;margin-top:8px;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase}.fxl-rails a:hover,.fxl-stack__bus{color:var(--fxl-amber-text)}@media (prefers-reduced-motion:reduce){.fxl-stack__pulse,.fxl-stack__svc .fxl-stack__row,.fxl-stack__svc .fxl-stack__tick{animation:none}.fxl-stack__svc .fxl-stack__row{color:var(--fxl-dim)}}@media (max-width:768px){.fxl-cell--eval{grid-template-columns:1fr;gap:24px}}.fxl-flow{display:flex;align-items:stretch;gap:14px}.fxl-flow__stage{flex:1;border:1px solid var(--fxl-line);background:var(--fxl-panel);border-radius:14px;padding:20px 22px}.fxl-flow__no{display:block;font-family:var(--fxl-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--fxl-amber-text);margin-bottom:10px}.fxl-flow__title{display:block;font-family:var(--fxl-display);font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--fxl-text)}.fxl-flow__desc{display:block;margin-top:6px;font-size:12.5px;line-height:1.5;color:var(--fxl-dim)}.fxl-flow__arrow{align-self:center;flex-shrink:0;font-family:var(--fxl-mono);font-size:16px;color:var(--fxl-amber-text)}@media (max-width:768px){.fxl-flow{flex-direction:column}.fxl-flow__arrow{transform:rotate(90deg)}}.fxl-rails{list-style:none;padding:0;margin:0;font-family:var(--fxl-mono);font-size:13px;color:var(--fxl-dim)}.fxl-rails li{display:flex;align-items:baseline;gap:12px;padding:12px 0;border-bottom:1px solid var(--fxl-line-soft)}.fxl-rails__state{align-self:center;flex-shrink:0;width:7px;height:7px;border-radius:2px;background:#fcb813}.fxl-rails a{color:var(--fxl-text);text-decoration:none;border-bottom:1px solid rgba(252,184,19,.45);padding-bottom:1px;transition:color .15s ease}.fxl-rails em{margin-left:auto;padding-left:16px;flex-shrink:0;font-style:normal;font-size:11px;letter-spacing:.1em;color:var(--fxl-faint)}.fxl-proc{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;list-style:none;padding:0;margin:0;background:var(--fxl-line);border:1px solid var(--fxl-line);border-radius:16px;overflow:hidden}.fxl-proc li{background:var(--fxl-bg);padding:clamp(22px,2.4vw,32px);margin:0}.fxl-proc a,.fxl-proc__no{font-family:var(--fxl-mono);color:var(--fxl-amber-text)}.fxl-proc__no{display:block;font-size:11px;letter-spacing:.2em;margin-bottom:16px}.fxl-proc__title{display:block;font-family:var(--fxl-display);font-size:17px;font-weight:600;letter-spacing:-.01em;color:var(--fxl-text);margin-bottom:8px}.fxl-proc__desc{display:block;font-size:13.5px;line-height:1.55;color:var(--fxl-dim)}.fxl-proc a{display:inline-block;margin-top:12px;font-size:12px;text-decoration:none;border-bottom:1px solid rgba(252,184,19,.45);padding-bottom:1px}.fxl-proc a:hover{border-bottom-color:var(--fxl-amber-text)}@media (max-width:1024px){.fxl-proc{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.fxl-proc{grid-template-columns:1fr}}.fxl-reg{border:1px solid var(--fxl-line);background:var(--fxl-panel);border-radius:16px;padding:clamp(16px,2.5vw,28px)}.fxl-reg__hd,.fxl-reg__row{display:grid;grid-template-columns:minmax(180px,1.2fr) 2fr 150px 24px;gap:16px;align-items:baseline;font-family:var(--fxl-mono)}.fxl-reg__hd{font-size:11px;letter-spacing:.08em;color:var(--fxl-faint);padding-bottom:10px}.fxl-reg__hd,.fxl-reg__item{border-bottom:1px solid var(--fxl-line-soft)}.fxl-reg__item:last-child{border-bottom:none}.fxl-reg__toggle{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fxl-reg__row{padding:14px 0;cursor:pointer;font-size:12.5px;user-select:none}.fxl-reg__toggle:focus-visible+.fxl-reg__row{outline:2px solid #fcb813;outline-offset:2px}.fxl-reg__type{font-size:10px;letter-spacing:.12em;color:var(--fxl-faint);margin-left:6px}.fxl-reg__type--lts,a.fxl-reg__row:hover .fxl-reg__name{color:var(--fxl-amber-text)}a.fxl-reg__row{text-decoration:none!important;transition:background .15s ease}a.fxl-reg__row:hover{background:var(--fxl-amber-soft)}.fxl-reg__name{color:var(--fxl-text);font-weight:500}.fxl-reg__caps{color:var(--fxl-dim)}.fxl-reg__status{color:var(--fxl-amber-text);white-space:nowrap}.fxl-reg__mark{color:var(--fxl-amber-text);font-size:14px;text-align:right;transition:transform .3s var(--fxl-ease)}.fxl-reg__item:has(.fxl-reg__toggle:checked) .fxl-reg__mark{transform:rotate(45deg)}.fxl-reg__body{display:none;padding:2px 0 18px;font-size:13.5px;line-height:1.6;color:var(--fxl-dim);max-width:72ch}.fxl-reg__item:has(.fxl-reg__toggle:checked) .fxl-reg__body{display:block}.fxl-reg__body p{margin:0 0 8px}.fxl-reg__body strong{color:var(--fxl-text);font-weight:600}@media (max-width:768px){.fxl-reg__hd,.fxl-reg__row{grid-template-columns:1fr 132px 20px;gap:10px}.fxl-reg__caps,.fxl-reg__hd span:nth-child(2){display:none}}.fxl-dgv{display:grid;gap:10px}.fxl-dgv__row{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:baseline;border:1px solid var(--fxl-line);border-radius:12px;padding:14px 20px}.fxl-dgv__key{font-family:var(--fxl-mono);font-size:12.5px;color:var(--fxl-amber-text)}.fxl-dgv__val{font-size:13.5px;line-height:1.55;color:var(--fxl-dim)}@media (max-width:640px){.fxl-dgv__row{grid-template-columns:1fr;gap:6px}}.fxl-cta{position:relative;overflow:hidden;border-radius:18px;padding:clamp(40px,6vw,64px) clamp(24px,5vw,56px);background:#0a0b0d;border:1px solid rgba(255,255,255,.08);text-align:center}.fxl-cta::before{content:\"\";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse at 50% 100%,#000 25%,transparent 75%);mask-image:radial-gradient(ellipse at 50% 100%,#000 25%,transparent 75%);pointer-events:none}.fxl-cta>*{position:relative;z-index:1}.fxl-cta__title{display:block;font-family:var(--fxl-display);font-size:clamp(1.5rem,3vw,2.2rem);font-weight:700;letter-spacing:-.02em;line-height:1.1;color:#f5f5f0;margin-bottom:12px}.fxl-cta__sub{display:block;font-size:14.5px;color:#b9b9b1;max-width:56ch;margin:0 auto 24px}html.fxl-js .rv{opacity:0;transform:translateY(12px);transition:opacity .6s var(--fxl-ease),transform .6s var(--fxl-ease);transition-delay:calc(var(--i, 0)*.06s)}html.fxl-js .rv.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html.fxl-js .rv{opacity:1;transform:none;transition:none}.fxl-rails__state{animation:none}}"}],"page":{"pagePath":"6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","slug":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","pageMetadata":{"title":"Intro to Elasticsearch","description":"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.","owner":"docs","last_reviewed":"2026-08-31T00:00:00.000Z","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Heading}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This integration allows event-driven systems to use Elasticsearch’s search and analytics capabilities for real-time processing and retrieval of event data.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-elasticsearch`,children:`What is Elasticsearch?`}),`\n`,_jsxs(_components.p,{children:[`Elasticsearch is a highly scalable open-source search and analytics engine built on top of the `,_jsx(_components.a,{href:`https://lucene.apache.org/`,children:`Apache Lucene`}),` library. It is designed to handle a wide range of data types and is particularly well-suited for real-time search and data analysis use cases. Elasticsearch provides a distributed, document-oriented architecture, making it capable of handling large volumes of structured, semi-structured, and unstructured data.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works?`}),`\n`,_jsx(_components.p,{children:`At its core, Elasticsearch operates as a distributed search engine, allowing you to store, search, and retrieve large amounts of data in near real-time. It uses a schema-less JSON-based document model, where data is organized into indices, which can be thought of as databases. Within an index, documents are stored, indexed, and made searchable based on their fields. Elasticsearch also provides advanced querying capabilities, allowing you to perform complex searches, filter data, and aggregate results.`}),`\n`,_jsx(Heading,{level:`2`,id:`why-it-is-useful`,children:`Why it is useful?`}),`\n`,_jsx(_components.p,{children:`One of the key features of Elasticsearch is its distributed nature. It supports automatic data sharding, replication, and node clustering, which enables it to handle massive amounts of data across multiple servers or nodes. This distributed architecture provides high availability and fault tolerance, ensuring that data remains accessible even in the event of hardware failures or network issues.`}),`\n`,_jsx(_components.p,{children:`Elasticsearch integrates with various programming languages and frameworks through its comprehensive RESTful API. It also provides official clients for popular languages like Java, Python, and JavaScript, enabling you to interact with the search engine in your preferred development environment.`}),`\n`,_jsx(Heading,{level:`2`,id:`indexing-\u0026-sharding`,children:`Indexing \u0026 sharding`}),`\n`,_jsx(Heading,{level:`3`,id:`indexing`,children:`Indexing`}),`\n`,_jsx(_components.p,{children:`Indexing refers to the process of adding, updating, or deleting documents in Elasticsearch. It involves taking data, typically in JSON format, and transforming it into indexed documents within an index. Each document represents a data record and contains fields with corresponding values. Elasticsearch uses an inverted index data structure to efficiently map terms or keywords to the documents containing those terms. This enables fast full-text search capabilities and retrieval of relevant documents.`}),`\n`,_jsx(Heading,{level:`3`,id:`sharding`,children:`Sharding`}),`\n`,_jsx(_components.p,{children:`Sharding, on the other hand, is the practice of dividing index data into multiple smaller subsets called shards. Each shard is an independent, self-contained index that holds a portion of the data. By distributing data across multiple shards, Elasticsearch achieves horizontal scalability and improved performance. Sharding allows Elasticsearch to handle large amounts of data by parallelizing search and indexing operations across multiple nodes or servers.`}),`\n`,_jsx(_components.p,{children:`Shards can be configured as primary or replica shards. Primary shards contain the original data, while replica shards are exact copies of the primary shards, providing redundancy and high availability. By having multiple replicas, Elasticsearch ensures data durability and fault tolerance. Replicas also enable parallel search operations, increasing search throughput.`}),`\n`,_jsx(_components.p,{children:`Sharding offers several advantages. It allows data to be distributed across multiple nodes, enabling parallel processing and faster search operations. It also provides fault tolerance, as data is replicated across multiple shards. Additionally, sharding allows Elasticsearch to scale horizontally by adding more nodes and distributing the data across them.`}),`\n`,_jsx(_components.p,{children:`The number of shards and their allocation can be determined during index creation or modified later. Consider factors such as the size of the dataset, hardware resources, and search performance requirements when deciding on the number of shards.`}),`\n`,_jsx(_components.p,{children:`For more details, check Elasticsearch documentation:`}),`\n`,_jsx(Card,{icon:`link`,title:`Elasticsearch documentation`,href:`https://www.elastic.co/guide/index.html`}),`\n`,_jsx(Heading,{level:`2`,id:`using-elasticsearch-for-advanced-indexing-with-flowx-ai`,children:`Using Elasticsearch for advanced indexing with FlowX.AI`}),`\n`,_jsxs(_components.p,{children:[`The integration between FlowX.AI and Elasticsearch involves the indexing of specific keys or data from the `,_jsx(_components.a,{href:`/6.x/docs/building-blocks/ui-designer/`,children:_jsx(_components.strong,{children:`UI Designer`})}),` to `,_jsx(_components.a,{href:`/6.x/docs/building-blocks/process/process-definition`,children:`process definitions`}),`. The indexing process is initiated by the `,_jsx(_components.a,{href:`/6.x/docs/platform-deep-dive/core-components/flowx-engine`,children:`FlowX Engine`}),` which sends the data to Elasticsearch, where data is then indexed in the “process_instance” index.`]}),`\n`,_jsx(_components.p,{children:`There are two methods available for indexing data: Kafka and HTTP.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Kafka`}),`: Data is sent to be indexed through a Kafka topic using the new strategy. Deploy the `,_jsx(_components.a,{href:`/6.x/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing#step-2-deploy-kafka-connect`,children:_jsx(_components.strong,{children:`Kafka Connect with Elasticsearch Sink Connector`})}),` in the infrastructure to utilize this method.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HTTP`}),`: Data is indexed by establishing a direct connection from the FlowX Engine to Elasticsearch. Use HTTP calls to connect directly from the FlowX Engine to Elasticsearch.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`To ensure effective indexing of process instances’ details, a crucial step involves defining a mapping that specifies how Elasticsearch should index the received messages. This mapping is essential as the process instances’ details often have specific formats. The process-engine takes care of this by automatically creating an index template during startup if it doesn’t already exist. The index template acts as a blueprint, providing Elasticsearch with the necessary instructions on how to index and organize the incoming data accurately. By establishing and maintaining an appropriate index template, the integration between FLOWX.AI and Elasticsearch can index and retrieve process instance information in a structured manner.`}),`\n`,_jsx(Heading,{level:`3`,id:`kafka-transport-strategy`,children:`Kafka transport strategy`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kafka-concepts`,children:`Kafka`}),` transport strategy implies process-engine sending messages to a Kafka topic whenever there is data from a process instance to be indexed. Kafka Connect is then configured to read these messages from the topic and forward them to Elasticsearch for indexing.`]}),`\n`,_jsx(_components.p,{children:`This approach offers benefits such as fire-and-forget communication, where the process-engine no longer needs to spend time handling indexing requests. By decoupling the process-engine from the indexing process and using Kafka as a messaging system, the overall system becomes more efficient and scalable. The process-engine can focus on its core responsibilities, while Kafka Connect takes care of transferring the messages to Elasticsearch for indexing.`}),`\n`,_jsx(_components.p,{children:`To optimize indexing response time, Elasticsearch utilizes multiple indices created dynamically by the Kafka Connect connector. The creation of indices is based on the timestamp of the messages received in the Kafka topic. The frequency of index creation, such as per minute, hour, week, or month, is determined by the timestamp format configuration of the Kafka connector.`}),`\n`,_jsx(_components.p,{children:`It’s important to note that the timestamp used for indexing is the process instance’s start date. This means that subsequent updates received for the same object will be directed to the original index for that process instance. To ensure proper identification and indexing, it is crucial that the timestamp of the message in the Kafka topic corresponds to the process instance’s start date, while the key of the message aligns with the process instance’s UUID. These two elements serve as unique identifiers for determining the index in which a process instance object was originally indexed.`}),`\n`,_jsx(_components.p,{children:`For more details on how to configure process instance indexing through Kafka transport, check the following section:`}),`\n`,_jsxs(CardGroup,{children:[_jsx(Card,{title:`Configuring Elasticsearch indexing`,href:`/6.x/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing`,icon:`file`}),_jsx(Card,{title:`Configuration guidelines`,href:`/6.x/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/process-instance-indexing-config-guidelines`,icon:`file`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Intro to Elasticsearch","description":"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.","owner":"docs","last_reviewed":"2026-08-31T00:00:00.000Z","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What is Elasticsearch?","slug":"what-is-elasticsearch","depth":2,"children":[]},{"title":"How it works?","slug":"how-it-works","depth":2,"children":[]},{"title":"Why it is useful?","slug":"why-it-is-useful","depth":2,"children":[]},{"title":"Indexing \u0026 sharding","slug":"indexing-\u0026-sharding","depth":2,"children":[{"title":"Indexing","slug":"indexing","depth":3,"children":[]},{"title":"Sharding","slug":"sharding","depth":3,"children":[]}]},{"title":"Using Elasticsearch for advanced indexing with FlowX.AI","slug":"using-elasticsearch-for-advanced-indexing-with-flowx-ai","depth":2,"children":[{"title":"Kafka transport strategy","slug":"kafka-transport-strategy","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/flowxai/9795f3937492dd76/snippets/zendesk-verification.js","/_mintlify/custom/flowxai/93d12cb97573b7cd/snippets/intro-hero.js","/_mintlify/custom/flowxai/90103fefc8b4bea0/snippets/footer-horizon.js"],"subdomain":"flowxai","siteName":"FlowX.AI","title":"Intro to Elasticsearch - FlowX.AI","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6ae4be3e2e85ccd8a8a6d3e6","deploymentId":"694954a421c35c020852b639","questionText":"How does indexing work?","status":"active","generatedBy":"contextual","path":"6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","createdAt":"2026-10-30T15:56:46.157Z","updatedAt":"2026-10-30T15:56:46.157Z","__v":0},{"_id":"6ae4be3e2e85ccd8a8a6d3e5","deploymentId":"694954a421c35c020852b639","questionText":"What is Elasticsearch?","status":"active","generatedBy":"contextual","path":"6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","createdAt":"2026-10-30T15:56:46.157Z","updatedAt":"2026-10-30T15:56:46.157Z","__v":0},{"_id":"6ae4be3e2e85ccd8a8a6d3e7","deploymentId":"694954a421c35c020852b639","questionText":"Why use Elasticsearch?","status":"active","generatedBy":"contextual","path":"6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","createdAt":"2026-10-30T15:56:46.157Z","updatedAt":"2026-10-30T15:56:46.157Z","__v":0}],"navMaps":{"firstHrefInVersion":{"v6.x":{"href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":0},"v5.9.x":{"href":"/5.9/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":1},"v5.1.x":{"href":"/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":1},"v4.7.x":{"href":"/4.7.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":1},"v4.1.x":{"href":"/4.1.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":1,"noindex":true},"v3.x":{"href":"/3.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch","matchLevel":1,"noindex":true}},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T15:55:57.510Z","gitLastModified":"2026-10-30T15:55:04.000Z","originalFileLocation":"6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\">\u003cmeta data-mint-head name=\"application-name\" content=\"FlowX.AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Intro to Elasticsearch - FlowX.AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FlowX.AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://flowxai.mintlify.app/_mintlify/api/og/v2?division=Infrastructure+technologies\u0026amp;title=Intro+to+Elasticsearch\u0026amp;description=Integrate+Elasticsearch+into+event-driven+architectures+and+workflows+to+efficiently+index+and+search+event+data.\u0026amp;theme=021ad2ee1834111be160e8a7\u0026amp;signature=6d7ca8bea67e1ee6fa48fc3d4da20db6e513af607c8a97559008a6f89b097c38\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Intro to Elasticsearch - FlowX.AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://flowxai.mintlify.app/_mintlify/api/og/v2?division=Infrastructure+technologies\u0026amp;title=Intro+to+Elasticsearch\u0026amp;description=Integrate+Elasticsearch+into+event-driven+architectures+and+workflows+to+efficiently+index+and+search+event+data.\u0026amp;theme=021ad2ee1834111be160e8a7\u0026amp;signature=6d7ca8bea67e1ee6fa48fc3d4da20db6e513af607c8a97559008a6f89b097c38\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/flowxai/tLAtpK66JQ6LptNv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FlowX.AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#fcb813\">\u003cmeta data-mint-head name=\"zd-site-verification\" content=\"94tteg5ir5of8gkb4twzh\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.flowx.ai/#organization\",\"name\":\"FlowX.AI\",\"url\":\"https://docs.flowx.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/flowxai/38fXEM0a7v86Lg2m/logo/light.png?fit=max\u0026auto=format\u0026n=38fXEM0a7v86Lg2m\u0026q=85\u0026s=d767c06cef433b0a02f40a1f4f785eab\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.flowx.ai#website\",\"name\":\"FlowX.AI\",\"url\":\"https://docs.flowx.ai\",\"publisher\":{\"@id\":\"https://docs.flowx.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch#webpage\",\"url\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch\",\"name\":\"Intro to Elasticsearch\",\"description\":\"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\",\"dateModified\":\"2026-10-30T15:55:04.000Z\",\"isPartOf\":{\"@id\":\"https://docs.flowx.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Concepts\",\"item\":\"https://docs.flowx.ai/6.x/docs/platform-overview/flowx-architecture\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Intro to Elasticsearch\",\"item\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch#article\",\"headline\":\"Intro to Elasticsearch\",\"name\":\"Intro to Elasticsearch\",\"description\":\"Integrate Elasticsearch into event-driven architectures and workflows to efficiently index and search event data.\",\"url\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch\",\"mainEntityOfPage\":{\"@id\":\"https://docs.flowx.ai/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch#webpage\"},\"dateModified\":\"2026-10-30T15:55:04.000Z\",\"publisher\":{\"@id\":\"https://docs.flowx.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.flowx.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FlowX.AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FlowX.AI","nav":{"global":null,"versions":[{"version":"v6.x","tag":"Preview","tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"FlowX.AI documentation","icon":"book-open","mode":"wide","href":"/6.x/docs/introduction"},{"title":"Tutorial: Build a credit card application","sidebarTitle":"Build your first process","icon":"rocket","href":"/6.x/docs/getting-started/building-your-first-proc"},{"title":"Tutorial: Build your first workflow","sidebarTitle":"Build your first workflow","icon":"diagram-next","href":"/6.x/docs/getting-started/building-your-first-workflow"},{"title":"Tutorial: Build your first UI Flow","sidebarTitle":"Build your first UI Flow","icon":"browser","href":"/6.x/docs/getting-started/building-your-first-ui-flow"},{"title":"Glossary","icon":"book","href":"/6.x/docs/getting-started/glossary"},{"title":"Using FlowX docs with AI assistants","icon":"robot","href":"/6.x/docs/getting-started/using-flowx-docs-with-ai"}]},{"group":"Concepts","pages":[{"title":"FlowX.AI architecture: services, layers, and data flow","sidebarTitle":"FlowX.AI architecture","icon":"diagram-project","href":"/6.x/docs/platform-overview/flowx-architecture"},{"title":"FlowX.AI data architecture: which service uses which store","sidebarTitle":"Data architecture","icon":"database","href":"/6.x/docs/platform-overview/data-architecture"},{"title":"Security","icon":"shield-check","href":"/6.x/docs/platform-overview/security"},{"title":"Intro to BPMN","description":"A process represents your business use case, such as requesting a credit card, placing a food order, or registering a vehicle.","icon":"diagram-project","href":"/6.x/docs/platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-bpmn"},{"group":"Infrastructure technologies","icon":"server","pages":[{"title":"Intro to Elasticsearch","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"},{"title":"Intro to Kafka concepts","description":"Apache Kafka is an open-source distributed event streaming platform that can handle a high volume of data and enables you to pass messages from one end-point to another.","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kafka-concepts"},{"title":"Intro to Kubernetes","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kubernetes"},{"title":"Intro to NGINX","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-nginx"},{"title":"Intro to Redis","href":"/6.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-redis"}]}]},{"group":"FlowX.AI Designer","pages":[{"title":"FlowX.AI Designer","icon":"pen-ruler","href":"/6.x/docs/flowx-designer/overview"},{"title":"Notification center","icon":"bell","href":"/6.x/docs/flowx-designer/notification-center"},{"group":"Design Assets","icon":"pen","pages":[{"title":"Themes","href":"/6.x/docs/flowx-designer/design-assets/themes"},{"title":"Fonts","href":"/6.x/docs/flowx-designer/design-assets/font-files"},{"title":"Global Media Library","href":"/6.x/docs/flowx-designer/design-assets/global-media-library"}]},{"group":"Managing a project flow","icon":"arrow-progress","pages":[{"title":"Creating a new project","href":"/6.x/docs/flowx-designer/managing-a-project-flow/creating-a-project"},{"title":"Creating and managing process definitions","href":"/6.x/docs/flowx-designer/managing-a-project-flow/creating-a-new-process-definition"},{"title":"Adding a new node","href":"/6.x/docs/flowx-designer/managing-a-project-flow/adding-a-new-node"},{"title":"Adding an action to a node","href":"/6.x/docs/flowx-designer/managing-a-project-flow/adding-an-action-to-a-node"},{"title":"Handling decisions in the flow","href":"/6.x/docs/flowx-designer/managing-a-project-flow/handling-decisions-in-the-flow"},{"title":"Adding parallel flow branches","href":"/6.x/docs/flowx-designer/managing-a-project-flow/adding-more-flow-branches"},{"title":"Creating a user interface","href":"/6.x/docs/flowx-designer/managing-a-project-flow/creating-a-user-interface"},{"title":"Moving a token backwards in a process","href":"/6.x/docs/flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process"},{"title":"Exporting and importing projects","href":"/6.x/docs/flowx-designer/managing-a-project-flow/export-import-a-process-definition"},{"title":"Initiating/starting processes","href":"/6.x/docs/flowx-designer/managing-a-project-flow/starting-a-process"}]}]},{"group":"Building projects","pages":[{"title":"Workspaces","icon":"building-columns","href":"/6.x/docs/projects/workspaces"},{"title":"Resources","icon":"building-wheat","href":"/6.x/docs/projects/resources"},{"title":"Reference types in resources usage","icon":"link","href":"/6.x/docs/projects/reference-types"},{"group":"Configuration","icon":"box","pages":[{"title":"Projects","href":"/6.x/docs/projects/managing-applications/application"},{"title":"Libraries","href":"/6.x/docs/projects/managing-applications/libraries"},{"title":"Versioning","href":"/6.x/docs/projects/managing-applications/versioning"},{"title":"Checking a version for issues","icon":"triangle-exclamation","href":"/6.x/docs/projects/managing-applications/checking-for-issues"},{"title":"Dependencies","href":"/6.x/docs/projects/managing-applications/dependencies"}]},{"group":"Runtime","icon":"play","pages":[{"title":"Builds","href":"/6.x/docs/projects/runtime/builds"},{"title":"Active policy","href":"/6.x/docs/projects/runtime/active-policy"},{"title":"Configuration parameters overrides","href":"/6.x/docs/projects/runtime/configuration-parameters-overrides"},{"group":"Active process","pages":[{"title":"Process instance","href":"/6.x/docs/projects/runtime/active-process/process-instance"},{"title":"Update process variables","href":"/6.x/docs/projects/runtime/active-process/update-process-variables"},{"title":"Migrate process instances","href":"/6.x/docs/projects/runtime/active-process/migrate-process-instances"},{"title":"Move tokens","href":"/6.x/docs/projects/runtime/active-process/move-token"},{"title":"Failed process start (exceptions)","href":"/6.x/docs/projects/runtime/active-process/failed-process-start"}]},{"title":"Schedules","href":"/6.x/docs/projects/runtime/scheduled-processes"},{"title":"Manage Triggers","href":"/6.x/docs/projects/runtime/manage-triggers"},{"title":"Workflow instances","icon":"diagram-project","href":"/6.x/docs/projects/runtime/workflow-instances"},{"title":"UI Flow Sessions","href":"/6.x/docs/projects/runtime/ui-flow-sessions"}]}]},{"group":"Building blocks","pages":[{"group":"Processes","icon":"network-wired","pages":[{"title":"Process Designer","href":"/6.x/docs/building-blocks/process/process"},{"title":"Process definition","href":"/6.x/docs/building-blocks/process/process-definition"},{"title":"Permission-based expressions","href":"/6.x/docs/building-blocks/process/permission-based-expressions"},{"title":"Process data model","href":"/6.x/docs/building-blocks/process/data-model"},{"title":"Data mappers","href":"/6.x/docs/building-blocks/process/data-mappers"},{"title":"Passing data between nodes","href":"/6.x/docs/building-blocks/process/passing-data-between-nodes"},{"title":"Subprocess management","href":"/6.x/docs/building-blocks/process/subprocess"},{"title":"Navigation areas","href":"/6.x/docs/building-blocks/process/navigation-areas"},{"title":"Navigation best practices","href":"/6.x/docs/building-blocks/process/navigation-best-practices"},{"title":"Process design principles","href":"/6.x/docs/building-blocks/process/design-principles"}]},{"group":"Nodes","icon":"circle-nodes","pages":[{"title":"Process nodes (BPMN)","href":"/6.x/docs/building-blocks/node/node"},{"title":"Start/end nodes","href":"/6.x/docs/building-blocks/node/start-end-node"},{"title":"Send message/receive message tasks","href":"/6.x/docs/building-blocks/node/message-send-received-task-node"},{"title":"Service Task node","href":"/6.x/docs/building-blocks/node/task-node"},{"title":"User task node","href":"/6.x/docs/building-blocks/node/user-task-node"},{"title":"Exclusive gateway","href":"/6.x/docs/building-blocks/node/exclusive-gateway-node"},{"title":"Parallel gateway","href":"/6.x/docs/building-blocks/node/parallel-gateway"},{"group":"Call subprocess tasks","pages":[{"title":"Call activity node","href":"/6.x/docs/building-blocks/node/call-subprocess-tasks/call-activity-node"},{"title":"Start embedded subprocess","href":"/6.x/docs/building-blocks/node/call-subprocess-tasks/start-embedded-subprocess"}]},{"group":"Message events","pages":[{"title":"Message Events","href":"/6.x/docs/building-blocks/node/message-events/message-events"},{"title":"Message Start Event","href":"/6.x/docs/building-blocks/node/message-events/message-catch-start-event"},{"group":"Message intermediate events","pages":[{"title":"Message intermediate events overview","href":"/6.x/docs/building-blocks/node/message-events/message-intermediate/message-intermediate"},{"title":"Message throw intermediate event","href":"/6.x/docs/building-blocks/node/message-events/message-intermediate/message-throw-intermediate-event"},{"title":"Message catch intermediate event","href":"/6.x/docs/building-blocks/node/message-events/message-intermediate/message-catch-intermediate-event"},{"title":"Intermediate message events in business processes","href":"/6.x/docs/building-blocks/node/message-events/message-intermediate/example-intermediate-message-events"}]},{"title":"Message catch boundary events","href":"/6.x/docs/building-blocks/node/message-events/message-catch-boundary-event"}]},{"group":"Timer events","pages":[{"title":"Timer events","href":"/6.x/docs/building-blocks/node/timer-events/timer-events"},{"title":"Timer start event","href":"/6.x/docs/building-blocks/node/timer-events/timer-start-event"},{"title":"Timer Intermediate Event (interrupting)","href":"/6.x/docs/building-blocks/node/timer-events/timer-intermediate-event"},{"title":"Timer boundary event","href":"/6.x/docs/building-blocks/node/timer-events/timer-boundary-event"},{"title":"Timer expressions","href":"/6.x/docs/building-blocks/node/timer-events/timer-expressions"}]},{"title":"Error events","href":"/6.x/docs/building-blocks/node/error-events"}]},{"group":"Actions","icon":"bolt","pages":[{"title":"Node actions","href":"/6.x/docs/building-blocks/actions/actions"},{"group":"Business rule actions","pages":[{"title":"Business rules types","href":"/6.x/docs/building-blocks/actions/business-rule-action/business-rule-action"},{"title":"Extracting additional data in business rules","href":"/6.x/docs/building-blocks/actions/business-rule-action/extracting-additional-data"}]},{"title":"Send data to user interface","href":"/6.x/docs/building-blocks/actions/send-data-to-user-interface"},{"title":"Upload file action","href":"/6.x/docs/building-blocks/actions/upload-file-action"},{"title":"Start subprocess action","href":"/6.x/docs/building-blocks/actions/start-subprocess-action"},{"title":"Append params to parent process","href":"/6.x/docs/building-blocks/actions/append-params-to-parent-process"},{"title":"Kafka send action","href":"/6.x/docs/building-blocks/actions/kafka-send-action"},{"title":"Start integration workflow action","href":"/6.x/docs/building-blocks/actions/start-integration-workflow"},{"title":"Start new project instance","href":"/6.x/docs/building-blocks/actions/start-new-project-instance"},{"title":"Send notification action","href":"/6.x/docs/building-blocks/actions/send-notification-action"}]},{"group":"UI Designer","icon":"paintbrush","pages":[{"title":"UI Designer","href":"/6.x/docs/building-blocks/ui-designer/ui-designer"},{"title":"Platform-specific considerations","href":"/6.x/docs/building-blocks/ui-designer/platform-considerations"},{"title":"Screen configuration guide","href":"/6.x/docs/building-blocks/ui-designer/screen-configuration-guide"},{"title":"UI Designer best practices","href":"/6.x/docs/building-blocks/ui-designer/best-practices"},{"group":"Root components","pages":[{"title":"Root Components in UI Design","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/root-components/root-components"},{"title":"Container","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/root-components/container"},{"title":"Card","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/root-components/card"},{"title":"Custom component","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/root-components/custom"},{"title":"Global Header and Footer","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/root-components/global-header-footer"}]},{"group":"Collections UI elements","pages":[{"title":"Collection","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/collection/collection"},{"title":"Collection Prototype","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/collection/collection-prototype"}]},{"group":"Form elements","pages":[{"title":"Input field","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field"},{"title":"Text area","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/text-area"},{"title":"Single Select","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field"},{"title":"Multi select","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/multi-select"},{"title":"Checkbox","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field"},{"title":"Radio","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field"},{"title":"Switch","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field"},{"title":"Datepicker","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/datepicker-form-field"},{"title":"Slider","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/slider"},{"title":"Segmented button","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/segmented-button"}]},{"title":"Buttons","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/buttons"},{"title":"Multiple file upload","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/multiple-file-upload"},{"title":"File preview","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/file-preview"},{"title":"File download","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/file-download"},{"title":"Table","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/table"},{"title":"Image","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/image"},{"title":"Indicators","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/indicators"},{"title":"Typography","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/typography"},{"title":"Chat","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/chat"},{"title":"Markdown","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/markdown"},{"title":"Separator","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/separator"},{"title":"Progress bar","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/progress-bar"},{"title":"Tooltip","href":"/6.x/docs/building-blocks/ui-designer/ui-component-types/tooltip"},{"title":"Event Handlers","href":"/6.x/docs/building-blocks/ui-designer/event-handlers"},{"title":"Validators","href":"/6.x/docs/building-blocks/ui-designer/validators"},{"title":"Dynamic \u0026 computed values","href":"/6.x/docs/building-blocks/ui-designer/dynamic-and-computed-values"},{"title":"Localization and internationalization","href":"/6.x/docs/building-blocks/ui-designer/localization-and-i18n"},{"title":"Layout configuration","href":"/6.x/docs/building-blocks/ui-designer/layout-configuration"},{"title":"Conditional styling","href":"/6.x/docs/building-blocks/ui-designer/conditional-styling"}]},{"title":"UI Flows","icon":"file-pen","href":"/6.x/docs/building-blocks/ui-flows"},{"title":"Combine UI Flows, processes, and workflows","sidebarTitle":"Combine UI Flows, processes, and workflows","icon":"diagram-project","href":"/6.x/docs/building-blocks/combining-ui-flows-processes-and-workflows"},{"title":"Project data model","icon":"square-binary","href":"/6.x/docs/building-blocks/project-data-model"},{"title":"Token","icon":"coins","href":"/6.x/docs/building-blocks/token"},{"title":"Supported scripts","icon":"file-code","href":"/6.x/docs/building-blocks/supported-scripts"},{"group":"Reusable resources","icon":"puzzle-piece","pages":[{"title":"Reusable Functions","href":"/6.x/docs/building-blocks/reusable-resources/reusable-functions"},{"title":"Reusable UI Templates","href":"/6.x/docs/building-blocks/reusable-resources/reusable-ui"},{"title":"Custom Components","href":"/6.x/docs/building-blocks/reusable-resources/custom-components"}]}]},{"group":"Platform deep dive","pages":[{"group":"Core components","icon":"puzzle","pages":[{"title":"FlowX.AI Engine","href":"/6.x/docs/platform-deep-dive/core-components/flowx-engine"},{"title":"FlowX.AI Advancing Controller","href":"/6.x/docs/platform-deep-dive/core-components/advancing-controller"},{"title":"FlowX.AI Events Gateway","href":"/6.x/docs/platform-deep-dive/core-components/events-gateway"}]},{"group":"Core extensions","icon":"puzzle-piece","pages":[{"group":"Content management","pages":[{"title":"FlowX.AI CMS","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/content-management"},{"title":"Enumerations","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/enumerations"},{"title":"Substitution tags","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/substitution-tags"},{"title":"Media library","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/media-library"},{"group":"Document Templates","pages":[{"title":"Document Templates","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/documents-plugin-overview"},{"title":"Generating documents","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/generating-from-html-templates"},{"title":"Managing templates","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/managing-html-templates"},{"title":"Creating and uploading a new document","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/uploading-a-new-document"},{"title":"Converting files","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/converting-documents-to-different-formats"},{"title":"Splitting documents","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/splitting-a-document"},{"title":"Combining files","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/combining-files"},{"title":"Deleting files","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/deleting-a-file"},{"title":"Getting URLs","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/getting-urls-to-documents"},{"title":"Listing stored files","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/listing-stored-files"},{"title":"Encrypting and decrypting files","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/encrypting-decrypting-files"}]},{"group":"Notification Templates","pages":[{"title":"Notification Templates","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/notifications-plugin-overview"},{"title":"Managing notification templates","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/managing-notification-templates"},{"title":"Sending a notification","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-a-notification"},{"title":"Sending an email","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-an-email-with-attachments"},{"title":"Forwarding notifications","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/forwarding-notifications-to-an-external-system"},{"group":"OTP flow","pages":[{"title":"Handling OTP","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/otp-flow"},{"title":"Generate OTP","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/generate-otp"},{"title":"Validate OTP","href":"/6.x/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/validate-otp"}]}]}]},{"group":"Task management","pages":[{"title":"Task management","href":"/6.x/docs/platform-deep-dive/core-extensions/task-management/task-management-overview"},{"title":"Task Management localization","href":"/6.x/docs/platform-deep-dive/core-extensions/task-management/task-management-localization"},{"title":"Using allocation rules","href":"/6.x/docs/platform-deep-dive/core-extensions/task-management/using-allocation-rules"},{"title":"Using out of office records","href":"/6.x/docs/platform-deep-dive/core-extensions/task-management/using-out-of-office-records"},{"title":"Using stages","href":"/6.x/docs/platform-deep-dive/core-extensions/task-management/using-stages"}]},{"title":"Configuration parameters","href":"/6.x/docs/platform-deep-dive/core-extensions/configuration-parameters"},{"title":"FlowX.AI Audit","href":"/6.x/docs/platform-deep-dive/core-extensions/audit"},{"title":"FlowX.AI Scheduler","href":"/6.x/docs/platform-deep-dive/core-extensions/scheduler"},{"title":"FlowX.AI Data Search","href":"/6.x/docs/platform-deep-dive/core-extensions/search-data-service"}]},{"group":"Plugins","icon":"puzzle-piece-simple","pages":[{"title":"FlowX custom plugins","href":"/6.x/docs/platform-deep-dive/plugins/custom-plugins"},{"title":"OCR plugin","href":"/6.x/docs/platform-deep-dive/plugins/custom-plugins/ocr-plugin"},{"group":"Reporting plugin","pages":[{"title":"Reporting plugin","href":"/6.x/docs/platform-deep-dive/plugins/custom-plugins/reporting/reporting-overview"},{"title":"Authorization \u0026 access roles","href":"/6.x/docs/platform-deep-dive/plugins/custom-plugins/reporting/access-and-authorization"}]},{"title":"WYSIWYG editor","href":"/6.x/docs/platform-deep-dive/plugins/wysiwyg"}]},{"group":"Integrations","icon":"link","pages":[{"title":"Choose how to connect FlowX.AI to external systems","sidebarTitle":"Overview","href":"/6.x/docs/platform-deep-dive/integrations/integrations-overview"},{"title":"Consuming FlowX from external apps","href":"/6.x/docs/platform-deep-dive/integrations/consuming-flowx-from-external-apps"},{"title":"Finding identifiers and parameters","href":"/6.x/docs/platform-deep-dive/integrations/finding-identifiers-and-parameters"},{"group":"Integration Designer","pages":[{"title":"Integration Designer","href":"/6.x/docs/platform-deep-dive/integrations/integration-designer"},{"title":"Workflow data model","href":"/6.x/docs/platform-deep-dive/integrations/workflow-data-models"},{"title":"Custom Agent node","href":"/6.x/docs/platform-deep-dive/integrations/custom-agent-node"},{"title":"Deep Research node","href":"/6.x/docs/platform-deep-dive/integrations/deep-research-node"},{"title":"Document classifiers","href":"/6.x/docs/platform-deep-dive/integrations/document-classifiers"},{"title":"Proxy connections","href":"/6.x/docs/platform-deep-dive/integrations/proxy-connections"},{"group":"MCP Integration","pages":[{"title":"MCP integration","href":"/6.x/docs/platform-deep-dive/integrations/mcp-integration/mcp-integration-overview"},{"title":"MCP Data Sources","href":"/6.x/docs/platform-deep-dive/integrations/mcp-integration/adding-mcp-data-source"}]},{"group":"Knowledge Base Integration","pages":[{"title":"Knowledge Base integration","href":"/6.x/docs/platform-deep-dive/integrations/knowledge-base-integration/knowledge-base-overview"},{"title":"Managing stores","href":"/6.x/docs/platform-deep-dive/integrations/knowledge-base-integration/managing-content"},{"title":"Using Knowledge Base in workflows","href":"/6.x/docs/platform-deep-dive/integrations/knowledge-base-integration/using-knowledge-base-in-workflows"},{"title":"Testing a knowledge base","href":"/6.x/docs/platform-deep-dive/integrations/knowledge-base-integration/testing-knowledge-base"}]}]},{"group":"Data sources","pages":[{"title":"FlowX Database","href":"/6.x/docs/platform-deep-dive/integrations/flowx-database"},{"title":"Unmanaged MongoDB","href":"/6.x/docs/platform-deep-dive/integrations/unmanaged-mongodb"},{"title":"Oracle Database","href":"/6.x/docs/platform-deep-dive/integrations/oracle-database"},{"title":"PostgreSQL Database","href":"/6.x/docs/platform-deep-dive/integrations/postgresql-database"},{"title":"Db2 Database","href":"/6.x/docs/platform-deep-dive/integrations/db2-database"},{"title":"Testing data sources from Runtime","href":"/6.x/docs/platform-deep-dive/integrations/testing-data-sources"},{"title":"SOAP System","href":"/6.x/docs/platform-deep-dive/integrations/soap-system"},{"title":"File Storage","href":"/6.x/docs/platform-deep-dive/integrations/file-storage"},{"title":"Email Trigger","href":"/6.x/docs/platform-deep-dive/integrations/email-trigger"},{"title":"Email Sender","href":"/6.x/docs/platform-deep-dive/integrations/email-sender"},{"title":"Microsoft Outlook","href":"/6.x/docs/platform-deep-dive/integrations/microsoft-outlook-data-source"},{"title":"Incoming Webhooks","href":"/6.x/docs/platform-deep-dive/integrations/incoming-webhooks"}]},{"group":"Custom integrations","pages":[{"title":"Building a connector","href":"/6.x/docs/platform-deep-dive/integrations/building-a-connector"},{"title":"Creating a Kafka consumer","href":"/6.x/docs/platform-deep-dive/integrations/creating-a-kafka-consumer"},{"title":"Creating a Kafka producer","href":"/6.x/docs/platform-deep-dive/integrations/creating-a-kafka-producer"}]},{"group":"Testing \u0026 monitoring","pages":[{"title":"Mock integrations","href":"/6.x/docs/platform-deep-dive/integrations/mock-integrations"},{"title":"Observability with OpenTelemetry","href":"/6.x/docs/platform-deep-dive/integrations/open-telemetry"}]}]},{"title":"Third-party components","icon":"cube","href":"/6.x/docs/platform-deep-dive/third-party-components"},{"title":"Accessibility","icon":"universal-access","href":"/6.x/docs/platform-deep-dive/accessibility"},{"group":"User roles management","icon":"user","pages":[{"title":"Swimlanes","href":"/6.x/docs/platform-deep-dive/user-roles-management/swimlanes"},{"title":"Business filters","href":"/6.x/docs/platform-deep-dive/user-roles-management/business-filters"},{"title":"Anonymous runtime access","href":"/6.x/docs/platform-deep-dive/user-roles-management/anonymous-runtime-access"}]}]},{"group":"Resources","pages":[{"title":"Error glossary","icon":"circle-exclamation","href":"/6.x/docs/resources/error-glossary"}]},{"group":"API reference","pages":[{"group":"Start processes","pages":[{"title":"Get Build Info","api":"GET https://admin.devmain.flowxai.dev/rtm/api/runtime/wks/{workspaceId}/app/{appId}/build/info","href":"/6.x/docs/api/start-process/get-build-info"},{"title":"Get build info by process instance","api":"GET {BASE_URL}/api/runtime/process-instance/{processInstanceUuid}/build/info","href":"/6.x/docs/api/start-process/build-info-by-process-instance"},{"title":"Get build info by UI flow session","api":"GET {BASE_URL}/api/runtime/ui-flow-session/{uiFlowSessionUuid}/build/info","href":"/6.x/docs/api/start-process/build-info-by-ui-flow-session"},{"title":"Start process by workspace, app, and process name","api":"POST {BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/process-name/{processName}/start","href":"/6.x/docs/api/start-process/start-by-process-name"},{"title":"Start process by build id and process name","api":"POST https://admin.devmain.flowxai.dev/rtm/api/runtime/app/{appId}/build/{buildId}/process-name/{processDefinitionName}/start","href":"/6.x/docs/api/start-process/rest2"},{"title":"Start process and copy data from another instance","api":"POST {BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/process-name/{processName}/start/copyDataFrom/{processInstanceId}","href":"/6.x/docs/api/start-process/start-with-copy-data"},{"title":"Start process from UI with resource definition and inherit values","api":"POST {BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/rdi/{resourceDefinitionId}/start/inherit-from/{processInstanceId}","href":"/6.x/docs/api/start-process/start-process-rdi-inherit"}]},{"group":"Mocks","pages":[{"title":"Add new Kafka exchange mock","api":"POST {MOCK_ADAPTER_URL}/api/kafka-exchanges/","href":"/6.x/docs/api/mocks/add-kafka-mock"},{"title":"View Kafka Exchanges","api":"GET {MOCK_ADAPTER_URL}/api/kafka-exchanges","href":"/6.x/docs/api/mocks/view-kafka-exchanges"}]},{"group":"Storage","pages":[{"title":"List storage buckets","api":"GET {{documentUrl}}/internal/storage/buckets","href":"/6.x/docs/api/storage/list-buckets"},{"title":"List objects in a bucket","api":"GET {{documentURL}}/internal/storage/buckets/{BUCKET_NAME}","href":"/6.x/docs/api/storage/list-objects-in-buckets"},{"title":"Download a file","api":"GET documentURL/internal/storage/download","href":"/6.x/docs/api/storage/download-file"}]},{"title":"Clear cache","api":"POST {{baseUrlAdmin}}/api/internal/cache/clear","href":"/6.x/docs/api/clear-cache"},{"title":"Force platform rescan","api":"GET {baseUrl}/api/platform/discover","href":"/6.x/docs/api/force-rescan"},{"title":"MCP API Reference","href":"/6.x/docs/api/mcp-api-reference"}]}]},{"tab":"AI Platform","icon":"robot","pages":[{"title":"AI Platform","href":"/6.x/ai-platform/ai-in-flowx"}]},{"tab":"SDKs","icon":"code","pages":[{"title":"SDKs","href":"/6.x/sdks/sdks-overview"}]},{"tab":"Release notes","icon":"newspaper","pages":[{"title":"Release notes","href":"/release-notes/overview"}]},{"tab":"Cookbooks","icon":"utensils","pages":[{"title":"Cookbooks","href":"/6.x/cookbooks/overview"}]},{"tab":"Observatory","icon":"telescope","pages":[{"title":"Observatory","href":"/6.x/observatory/overview"}]},{"tab":"FlowX SaaS","icon":"cloud","pages":[{"title":"FlowX SaaS","href":"/6.x/docs/saas/saas-overview"}]},{"tab":"Setup guides","icon":"screwdriver-wrench","pages":[{"title":"Setup guides","href":"/6.x/setup-guides/migrate-to-flowx-ai-helm-chart"}]}]},{"version":"v5.9.x","default":true,"tag":"Latest LTS","pages":[{"title":"v5.9.x","href":"/5.9/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}]},{"version":"v5.1.x","tag":"LTS","pages":[{"title":"v5.1.x","href":"/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}]},{"version":"v4.7.x","tag":"Legacy","pages":[{"title":"v4.7.x","href":"/4.7.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}]},{"version":"v4.1.x","tag":"Legacy","pages":[{"title":"v4.1.x","href":"/4.1.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}]},{"version":"v3.x","tag":"Legacy","pages":[{"title":"v3.x","href":"/3.x/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch"}]}]},"basePath":"","title":"Intro to Elasticsearch - FlowX.AI","buildId":"dpl_77Hw7ZuAABM8E3WMbYAf2ohQCr3v","deploymentId":"dpl_77Hw7ZuAABM8E3WMbYAf2ohQCr3v","dynamics":["10e4515597"],"chunks":["BannerMarkdown-Br4Fx2_Z.js","dist-ptfS1uB_.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-rIpTdK8h.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}