OpenSearch
Поддерживается только производитель
Компонент OpenSearch позволяет взаимодействовать с API OpenSearch (opens in a new tab) 2.8.x с помощью клиентской библиотеки Java API.
Пользователям Maven необходимо добавить следующую зависимость для pom.xmlэтого компонента:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-opensearch</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>URI format
opensearch://clusterName[?options]
Configuring Options
Компоненты Camel настраиваются на двух отдельных уровнях:
-
уровень компонентов
-
уровень конечной точки
Configuring Component Options
На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.
Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.
У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.
Вы можете настроить компоненты, используя:
-
Компонент DSL (opens in a new tab) .
-
в файле конфигурации (
application.propertiesфайлы*.yaml, и т.д.). -
непосредственно в коде Java.
Configuring Endpoint Options
Настройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.
Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.
Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .
Заполнители свойств обеспечивают несколько преимуществ:
-
Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.
-
Они позволяют вынести конфигурацию за пределы кода.
-
Они помогают коду стать более гибким и пригодным для повторного использования.
В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.
Component Options
Компонент OpenSearch поддерживает 13 опций, которые перечислены ниже.
connectionTimeout (producer)
-
Время ожидания в мс до истечения времени ожидания соединения.
-
По умолчанию: 30000
-
Тип: int
hostAddresses (producer)
-
Список адресов удалённого транспорта, разделённых запятыми, в формате IP:Port. Параметры IP и Port необходимо оставить пустыми, чтобы вместо них учитывались hostAddresses.
-
По умолчанию:
-
Тип: String
lazyStartProducer (producer)
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: boolean
maxRetryTimeout (producer)
-
Время в мс до повторной попытки.
-
По умолчанию: 30000
-
Тип: int
socketTimeout (producer)
-
Время ожидания в мс до истечения времени ожидания сокета.
-
По умолчанию: 30000
-
Тип: int
autowiredEnabled (advanced)
-
Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.
-
По умолчанию: true
-
Тип: boolean
client (advanced)
-
Autowired : использование существующего настроенного клиента OpenSearch вместо создания отдельного клиента для каждой конечной точки. Это позволяет настроить клиент с помощью специальных параметров.
-
По умолчанию:
-
Тип: RestClient
enableSniffer (advanced)
-
Включить автоматическое обнаружение узлов в работающем кластере OpenSearch. Если эта опция используется вместе со Spring Boot, она управляется конфигурацией Spring Boot (см. раздел Отключение сниффера в Spring Boot).
-
По умолчанию: false
-
Тип: boolean
sniffAfterFailureDelay (advanced)
-
Задержка выполнения анализа, запланированная после сбоя (в миллисекундах).
-
По умолчанию: 60000
-
Тип: int
snifferInterval (advanced)
-
Интервал между последовательными выполнениями обычного анализа трафика в миллисекундах. Будет учитываться, если отключено sniffOnFailure или если между последовательными выполнениями анализа трафика нет сбоев.
-
По умолчанию: 300000
-
Тип: int
enableSSL (security)
-
Включить SSL.
-
По умолчанию: false
-
Тип: boolean
password (security)
-
Пароль для аутентификации.
-
По умолчанию:
-
Тип: String
user (security)
-
Базовая аутентификация пользователя.
-
По умолчанию:
-
Тип: String
Endpoint Options
Конечная точка OpenSearch настраивается с использованием синтаксиса URI:
opensearch:clusterName
Со следующими параметрами пути и запроса :
Path Parameters (1 parameters)
clusterName (producer)
-
Тип: Обязательное имя кластера.
-
По умолчанию:
-
Тип: String
Query Parameters (20 parameters)
connectionTimeout (producer)
-
Время ожидания в мс до истечения времени ожидания соединения.
-
По умолчанию: 30000
-
Тип: int
disconnect (producer)
-
Отключитесь после завершения вызова производителя.
-
По умолчанию: false
-
Тип: boolean
from (producer)
-
Начальный индекс ответа.
-
По умолчанию:
-
Тип: Integer
hostAddresses (producer)
-
Список удаленных транспортных адресов в формате ip:port, разделенных запятыми, для использования
-
По умолчанию:
-
Тип: String
indexName (producer)
-
Тип: Имя индекса, против которого необходимо действовать.
-
По умолчанию:
-
Тип: String
maxRetryTimeout (producer)
-
Время в мс до повторной попытки.
-
По умолчанию: 30000
-
Тип: int
operation (producer)
-
Какую операцию сделать.
Значения перечисления:
-
Index
-
Update
-
Bulk
-
GetById
-
MultiGet
-
MultiSearch
-
Delete
-
DeleteIndex
-
Search
-
Exists
-
Ping
-
-
По умолчанию:
-
Тип: OpensearchOperation
scrollKeepAliveMs (producer)
-
Время в мс, в течение которого OpenSearch будет поддерживать контекст поиска активным.
-
По умолчанию: 60000
-
Тип: int
size (producer)
-
Размер ответа.
-
По умолчанию:
-
Тип: Integer
socketTimeout (producer)
-
Время ожидания в мс до истечения времени ожидания сокета.
-
По умолчанию: 30000
-
Тип: int
useScroll (producer)
-
Включить использование прокрутки.
-
По умолчанию: false
-
Тип: boolean
waitForActiveShards (producer)
-
Создание индекса происходит до тех пор, пока не станет доступно необходимое для записи количество шардов.
-
По умолчанию: 1
-
Тип: int
lazyStartProducer (producer (advanced))
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: boolean
documentClass (advanced)
-
Класс, используемый при десериализации документов.
-
По умолчанию: ObjectNode
-
Тип: Class
enableSniffer (advanced)
-
Включить автоматическое обнаружение узлов в работающем кластере OpenSearch. Если эта опция используется вместе со Spring Boot, она управляется конфигурацией Spring Boot (см. раздел Отключение сниффера в Spring Boot).
-
По умолчанию:
-
Тип: boolean
hostnameVerifier (advanced)
-
Класс, используемый в качестве HostnameVerifier. По умолчанию HostnameVerifier отсутствует.
-
По умолчанию:
-
Тип: HostnameVerifier
sniffAfterFailureDelay (advanced)
-
Тип: Задержка выполнения анализа, запланированная после сбоя (в миллисекундах).
-
По умолчанию: 60000
-
Тип: int
snifferInterval (advanced)
-
Интервал между последовательными выполнениями обычного анализа трафика в миллисекундах. Будет учитываться, если отключено sniffOnFailure или если между последовательными выполнениями анализа трафика нет сбоев.
-
По умолчанию: 300000
-
Тип: int
certificatePath (security)
-
Сертификат, который можно использовать для доступа к кластеру ES. По умолчанию он загружается из classpath, но можно добавить префикс classpath:, file: или http: для загрузки ресурса из других систем.
-
По умолчанию:
-
Тип: String
enableSSL (security)
-
Включить SSL.
-
По умолчанию: false
-
Тип: boolean
Message Headers
Компонент OpenSearch поддерживает 9 заголовков сообщений, которые перечислены ниже:
operation (producer)
Constant: PARAM_OPERATION (opens in a new tab)
-
Операция, которую необходимо выполнить.
Значения перечисления:
-
Index
-
Update
-
Bulk
-
GetById
-
MultiGet
-
MultiSearch
-
Delete
-
DeleteIndex
-
Search
-
Exists
-
Ping
-
-
По умолчанию:
-
Тип: OpensearchOperation
indexId (producer)
Constant: PARAM_INDEX_ID (opens in a new tab)
-
Идентификатор индексированного документа.
-
По умолчанию:
-
Тип: String
indexName (producer)
Constant: PARAM_INDEX_NAME (opens in a new tab)
-
Тип: Имя индекса, против которого необходимо действовать.
-
По умолчанию:
-
Тип: String
documentClass (producer)
Constant: PARAM_DOCUMENT_CLASS (opens in a new tab)
-
Полное квалифицированное имя класса документа, подлежащего демаршалированию.
-
По умолчанию: ObjectNode
-
Тип: Class
waitForActiveShards (producer)
Constant: PARAM_WAIT_FOR_ACTIVE_SHARDS (opens in a new tab)
-
Создание индекса происходит до тех пор, пока не станет доступно необходимое для записи количество сегментов.
-
По умолчанию:
-
Тип: Integer
scrollKeepAliveMs (producer)
Constant: PARAM_SCROLL_KEEP_ALIVE_MS (opens in a new tab)
-
Начальный индекс ответа.
-
По умолчанию:
-
Тип: Integer
useScroll (producer)
Constant: PARAM_SCROLL (opens in a new tab)
-
Тип: Установите значение true, чтобы включить использование прокрутки.
-
По умолчанию:
-
Тип: Boolean
size (producer)
Constant: PARAM_SIZE (opens in a new tab)
-
Размер ответа.
-
По умолчанию:
-
Тип: Integer
from (producer)
Constant: PARAM_FROM (opens in a new tab)
-
Тип: Начальный индекс ответа.
-
По умолчанию:
-
Тип: Integer
Usage
Message Operations
В настоящее время поддерживаются следующие операции OpenSearch (opens in a new tab) . Задайте параметр URI конечной точки или заголовок обмена с ключом «operation» и одним из следующих значений. Некоторые операции также требуют установки других параметров или тела сообщения.
Index
-
Map,String,byte[],Reader,InputStreamилиIndexRequest.Builderсодержимое для индексации -
По умолчанию: Добавляет контент в индекс и возвращает его indexId в теле сообщения. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName". IndexId можно задать, указав заголовок сообщения с ключом "indexId".
GetById
-
Тип:
StringилиGetRequest.Builderиндекс идентификатора контента для извлечения -
По умолчанию: Извлекает документ, соответствующий заданному идентификатору индекса, и возвращает объект GetResponse в теле запроса. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName". Тип документа можно задать, указав заголовок сообщения с ключом "documentClass".
Delete
-
StringилиDeleteRequest.Builderиндекс идентификатора удаляемого контента -
По умолчанию: Удаляет указанный indexName и возвращает объект Result в теле запроса. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName".
DeleteIndex
-
Тип:
StringилиDeleteIndexRequest.Builderимя индекса для удаления -
По умолчанию: Удаляет указанный indexName и возвращает код статуса в теле сообщения. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName".
Bulk Iterableили BulkRequest.Builderлюбого типа, который уже принят (DeleteOperation.Builder для операции удаления, UpdateOperation.Builder для операции обновления, CreateOperation.Builder для операции создания, byte[], InputStream, String, Reader, Map или любой тип документа для операции индексации)
-
Добавляет/обновляет/удаляет содержимое из/в индекс и возвращает объект List<BulkResponseItem> в теле. Вы можете задать имя целевого индекса, задав заголовок сообщения с ключом «indexName».
-
По умолчанию:
Search
Map, StringилиSearchRequest.Builder
-
Тип: Поиск по содержимому с помощью карты строки запроса. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName". Количество возвращаемых результатов можно задать, указав заголовок сообщения с ключом "size". Начальное смещение документа можно задать, указав заголовок сообщения с ключом "from".
-
По умолчанию:
MultiSearch
MsearchRequest.Builder
-
Множественный поиск в одном
-
По умолчанию:
MultiGet
Iterable<String>или MgetRequest.Builderидентификатор документа для извлечения
-
Тип: Несколько попадают в один
Имя целевого индекса можно задать, задав заголовок сообщения с ключом «indexName».
-
По умолчанию:
Exists
None
-
Проверяет, существует ли индекс, и возвращает логический флаг в теле.
Необходимо задать имя целевого индекса, задав заголовок сообщения с ключом «indexName».
-
По умолчанию:
Update
byte[], InputStream, String, Reader, Mapили любой другой тип документа для обновления
-
Тип: Обновляет содержимое по индексу и возвращает indexId содержимого в теле. Имя целевого индекса можно задать, указав заголовок сообщения с ключом "indexName". IndexId можно задать, указав заголовок сообщения с ключом "indexId".
-
По умолчанию: Ping
Configure the component and enable basic authentication
Для использования компонента OpenSearch его необходимо настроить с минимальной конфигурацией.
OpensearchComponent opensearchComponent = new OpensearchComponent();
opensearchComponent.setHostAddresses("opensearch-host:9200");
camelContext.addComponent("opensearch", opensearchComponent);Для базовой аутентификации с помощью OpenSearch или использования обратного HTTP-прокси перед кластером OpenSearch просто настройте базовую аутентификацию и SSL на компоненте, как показано в примере ниже.
OpenSearchComponent opensearchComponent = new OpenSearchComponent();
opensearchComponent.setHostAddresses("opensearch-host:9200");
opensearchComponent.setUser("opensearchuser");
opensearchComponent.setPassword("secure!!");
camelContext.addComponent("opensearch", opensearchComponent);Document type
Для всех операций поиска можно указать тип извлекаемого документа, чтобы получить результат, уже не привязанный к ожидаемому типу.
Тип документа можно задать с помощью заголовка «documentClass» или с помощью параметра URI с тем же именем.
Examples
Index Example
Ниже приведен простой пример ИНДЕКСА.
from("direct:index")
.to("opensearch://opensearch?operation=Index&indexName=twitter");<route>
<from uri="direct:index"/>
<to uri="opensearch://opensearch?operation=Index&indexName=twitter"/>
</route>- Тип: * For this operation, you’ll need to specify an indexId header.Для этой операции вам потребуется указать заголовок indexId.
Клиенту достаточно передать сообщение с картой маршрута. Результат содержит созданный indexId.
Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);Search Example
Для поиска по определённым полям и значениям используйте операцию «Поиск». Передайте запрос в виде строки JSON или карты.
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter");<route>
<from uri="direct:search"/>
<to uri="opensearch://opensearch?operation=Search&indexName=twitter"/>
</route>String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}";
HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);Поиск по определенным полям с использованием карты.
Map<String, Object> actualQuery = new HashMap<>();
actualQuery.put("doc.content", "new release of ApacheCamel");
Map<String, Object> match = new HashMap<>();
match.put("match", actualQuery);
Map<String, Object> query = new HashMap<>();
query.put("query", match);
HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);Воспользуйтесь API прокрутки OpenSearch для поиска всех результатов.
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000");<route>
<from uri="direct:search"/>
<to uri="opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000"/>
</route>String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}";
try (OpenSearchScrollRequestIterator response = template.requestBody("direct:search", query, OpenSearchScrollRequestIterator.class)) {
// do something smart with results
}Также можно использовать разделенный EIP . (opens in a new tab)
from("direct:search")
.to("opensearch://opensearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000")
.split()
.body()
.streaming()
.to("mock:output")
.end();MultiSearch Example
Для многопоиска по определённым полям и значениям используется операция Operation MultiSearch. Передайте экземпляр MultiSearchRequest.
from("direct:multiSearch")
.to("opensearch://opensearch?operation=MultiSearch");<route>
<from uri="direct:multiSearch"/>
<to uri="opensearch://opensearch?operation=MultiSearch"/>
</route>Мультипоиск по определенным полям
MsearchRequest.Builder builder = new MsearchRequest.Builder().index("twitter").searches(
new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
.body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
.body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
List<MultiSearchResponseItem<?>> response = template.requestBody("direct:multiSearch", builder, List.class);