Справочник по соединителю Elastic MongoDB
Соединитель Elastic MongoDB — это соединитель для источников данных MongoDB. Этот соединитель написан на Python с использованием фреймворка соединителей Elastic.
Просмотреть исходный код для этого соединителя (ветвь 8.17, совместим с Elastic 8.17).
Справочник по управляемому соединителю Elastic
Просмотреть справочник по управляемому соединителю Elastic
Доступность и предварительные требования
Этот коннектор доступен в качестве управляемого коннектора в версиях Elastic 8.5.0 и более поздних.
Чтобы использовать этот коннектор в Elastic Cloud, выполните все требования к управляемому коннектору.
Совместимость
Этот коннектор совместим с MongoDB Atlas и MongoDB 3.6 и более поздними версиями.
Источник данных и ваша установка Elastic должны иметь возможность обмениваться данными по сети.
Настройка
Каждый раз, когда вы создаете индекс, который будет управляться этим коннектором, вы создадите новую конфигурацию коннектора. Вам потребуется вся или часть следующей информации о источнике данных.
- Имя хоста сервера
-
URI хоста MongoDB. Примеры:
-
mongodb+srv://my_username:my_password@cluster0.mongodb.net/mydb?w=majority -
mongodb://127.0.0.1:27017
-
- Имя пользователя
-
Имя пользователя MongoDB, которое будет использоваться коннектором.
Пользователь должен иметь доступ к настроенной базе данных и коллекции. Возможно, потребуется создать отдельного, только для чтения пользователя для каждого коннектора.
- Пароль
- Пароль MongoDB, который будет использоваться коннектором.
- База данных
- База данных MongoDB для синхронизации. База данных должна быть доступна с использованием настроенного имени пользователя и пароля.
- Коллекция
- Коллекция MongoDB для синхронизации. Коллекция должна существовать в настроенной базе данных. Коллекция должна быть доступна с использованием настроенного имени пользователя и пароля.
- Прямое подключение
- Включить использование варианта прямого подключения для клиента MongoDB. Отключено по умолчанию.
- Подключение SSL/TLS
-
Включить для установления защищенного соединения с сервером MongoDB с использованием шифрования SSL/TLS. Убедитесь, что ваша установка MongoDB поддерживает соединения SSL/TLS. Включите, если ваш кластер MongoDB использует записи DNS SRV (в частности, пользователи MongoDB Atlas).
Отключено по умолчанию.
- Удостоверяющий центр (.pem)
- Указывает корневой сертификат от Удостоверяющего центра. Значение сертификата используется для проверки сертификата, представленного экземпляром MongoDB.
Пользователи Atlas могут оставить это поле пустым, так как Atlas использует широко доверенный корневой CA.
- Пропустить проверку сертификата
- Пропускает различные проверки сертификатов (если SSL включен). Отключено по умолчанию.
Сильно рекомендуем отключить этот параметр в производственных средах.
Создать коннектор MongoDB
Использовать интерфейс
Для создания нового коннектора MongoDB:
- В интерфейсе Kibana перейдите на страницу Поиск → Содержание → Коннекторы из главного меню или используйте поле глобального поиска.
- Следуйте инструкциям по созданию нового коннектора MongoDB.
Для дополнительных операций, см. Connectors UI в Kibana.
Использовать API
Вы можете использовать API Elasticsearch Создание коннектора для создания нового коннектора MongoDB.
Например:
resp = client.connector.put(
connector_id="my-{service-name-stub}-connector",
index_name="my-elasticsearch-index",
name="Content synced from {service-name}",
service_type="{service-name-stub}",
is_native=True,
)
print(resp) const response = await client.connector.put({
connector_id: "my-{service-name-stub}-connector",
index_name: "my-elasticsearch-index",
name: "Content synced from {service-name}",
service_type: "{service-name-stub}",
is_native: true,
});
console.log(response); PUT _connector/my-mongodb-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from MongoDB",
"service_type": "mongodb",
"is_native": true
} Вам также понадобится создать ключ API для использования коннектором.
Пользователю нужны привилегии кластера manage_api_key, manage_connector и write_connector_secrets для программной генерации ключей API.
Для создания ключа API для коннектора:
-
Запустите следующую команду, заменив указанные значения. Обратите внимание на
idиencodedзначения из ответа:resp = client.security.create_api_key( name="my-connector-api-key", role_descriptors={ "my-connector-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": False } ] } }, ) print(resp)const response = await client.security.createApiKey({ name: "my-connector-api-key", role_descriptors: { "my-connector-connector-role": { cluster: ["monitor", "manage_connector"], indices: [ { names: [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*", ], privileges: ["all"], allow_restricted_indices: false, }, ], }, }, }); console.log(response);POST /_security/api_key { "name": "my-connector-api-key", "role_descriptors": { "my-connector-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": false } ] } } } -
Используйте значение
encodedдля хранения секрета коннектора и обратите внимание наidзначение из ответа:resp = client.perform_request( "POST", "/_connector/_secret", headers={"Content-Type": "application/json"}, body={ "value": "encoded_api_key" }, ) print(resp)const response = await client.transport.request({ method: "POST", path: "/_connector/_secret", body: { value: "encoded_api_key", }, }); console.log(response);POST _connector/_secret { "value": "encoded_api_key" } -
Используйте ключ API
idи секрет коннектораidдля обновления коннектора:resp = client.connector.update_api_key_id( connector_id="my_connector_id>", api_key_id="API key_id", api_key_secret_id="secret_id", ) print(resp)const response = await client.connector.updateApiKeyId({ connector_id: "my_connector_id>", api_key_id: "API key_id", api_key_secret_id: "secret_id", }); console.log(response);PUT /_connector/my_connector_id>/_api_key_id { "api_key_id": "API key_id", "api_key_secret_id": "secret_id" }
См. документацию API Elasticsearch для получения подробной информации обо всех доступных API коннекторов.
Использование
Чтобы использовать этот коннектор в качестве управляемого коннектора, используйте рабочий процесс Коннектора. См. Управляемые коннекторы Elastic.
Для дополнительных операций, см. Connectors UI в Kibana.
Пример
Пример доступен для этого коннектора. См. Учебник по управляемому коннектору (MongoDB).
Известные проблемы
SSL должен быть включен для MongoDB Atlas
- Ошибка, добавленная в 8.12.0, приводит к сбоям коннектора при синхронизации Mongo Atlas URL (
mongo+srv), если SSL/TLS не включен.
Выражения и переменные в агрегационных конвейерах
Невозможно использовать выражения, такие как new Date(), внутри агрегационного конвейера. Эти выражения не будут вычислены подлежащим клиентом MongoDB, а будут переданы как строка экземпляру MongoDB. Возможным решением является использование переменных агрегации.
Неправильно (new Date() будет интерпретироваться как строка):
{
"aggregate": {
"pipeline": [
{
"$match": {
"expiresAt": {
"$gte": "new Date()"
}
}
}
]
}
} Правильно (использование $$NOW):
{
"aggregate": {
"pipeline": [
{
"$addFields": {
"current_date": {
"$toDate": "$$NOW"
}
}
},
{
"$match": {
"$expr": {
"$gte": [
"$expiresAt",
"$current_date"
]
}
}
}
]
}
} Подключение с самозаверяющимся или пользовательским TLS-сертификатом CA
В настоящее время коннектор MongoDB не поддерживает работу с самозаверяющимися или пользовательскими сертификатами CA при подключении к вашему самостоятельно управляемому хосту MongoDB.
Следующее решение не должно использоваться в производственных средах.
Это можно обойти в средах разработки, добавив определенные параметры запроса к настроенному хосту.
Например, если ваш хост - mongodb+srv://my.mongo.host.com, добавление ?tls=true&tlsAllowInvalidCertificates=true позволит отключить проверку TLS-сертификатов.
Полный хост в этом примере будет выглядеть так:
mongodb+srv://my.mongo.host.com/?tls=true&tlsAllowInvalidCertificates=true
См. Известные проблемы для любых проблем, затрагивающих все коннекторы.
Отладка
См. Отладку.
Безопасность
См. Безопасность.
Документы и синхронизация
Ниже описано стандартное поведение синхронизации для этого коннектора. Используйте правила синхронизации и конвейеры обработки данных, чтобы настроить синхронизацию для определенных индексов.
Все документы в настроенной базе данных и коллекции MongoDB извлекаются и преобразуются в документы в вашем индексе Elasticsearch.
- Коннектор создает один документ Elasticsearch для каждого документа MongoDB в настроенной базе данных и коллекции.
- Для каждого документа коннектор преобразует каждый поле MongoDB в поле Elasticsearch.
- Для каждого поля Elasticsearch динамически определяет тип данных.
Это приводит к документам Elasticsearch, которые тесно соответствуют исходным документам MongoDB.
Сопоставление Elasticsearch создается при создании первого документа.
Каждый синхронизация является "полной" синхронизацией. Для каждого обнаруженного документа MongoDB:
- Если документ не существует, документ создается в Elasticsearch.
- Если документ уже существует в Elasticsearch, документ Elasticsearch заменяется, а версия увеличивается.
- Если существующий документ Elasticsearch больше не существует в коллекции MongoDB, он удаляется из Elasticsearch.
- Вложенные документы хранятся как поле
objectв родительском документе.
Это рекурсивно, так как вложенные документы сами могут содержать вложенные документы.
- Файлы размером более 10 МБ не будут извлечены
- Разрешения не синхронизируются. Все индексированные документы в развертывании Elastic будут видны всем пользователям с доступом к этому развертыванию Elastic.
Правила синхронизации
В следующих разделах описаны правила синхронизации для этого коннектора.
Основные правила синхронизации идентичны для всех коннекторов и доступны по умолчанию.
Расширенные правила для MongoDB могут быть использованы для выражения либо find запросов, либо агрегационных конвейеров. Они также могут быть использованы для настройки параметров, доступных при выполнении этих запросов/конвейеров.
find запросы
Для выполнения текстовых поисков необходимо создать индекс текста в коллекции MongoDB.
Для find запросов структура этого JSON DSL должна быть следующей:
{
"find":{
"filter": {
// find query goes here
},
"options":{
// query options go here
}
}
} Например:
{
"find": {
"filter": {
"$text": {
"$search": "garden",
"$caseSensitive": false
}
},
"skip": 10,
"limit": 1000
}
} find запросы также поддерживают дополнительные параметры, например, объект projection:
{
"find": {
"filter": {
"languages": [
"English"
],
"runtime": {
"$gt":90
}
},
"projection":{
"tomatoes": 1
}
}
} Где доступные параметры:
-
allow_disk_use(true, false) — При установке в значение true сервер может записывать временные данные на диск во время выполнения операции поиска. Этот параметр доступен только для версий сервера MongoDB 4.4 и новее. -
allow_partial_results(true, false) — Позволяет запросу получать частичные результаты, если некоторые фрагменты недоступны. -
batch_size(Целое число) — Количество документов, возвращаемых в каждой порции результатов из MongoDB. -
filter(Объект) — Критерии фильтрации для запроса. -
limit(Целое число) — Максимальное количество документов для возврата из запроса. -
max_time_ms(Целое число) — Максимальное время выполнения запроса в миллисекундах. -
no_cursor_timeout(true, false) — Сервер обычно отключает бездействующие курсоры через определённый период бездействия (10 минут), чтобы предотвратить чрезмерное использование памяти. Установите этот параметр, чтобы этого избежать. -
projection(Массив, Объект) — Поля для включения или исключения из каждого документа в наборе результатов. Если массив, он должен содержать хотя бы один элемент. -
return_key(true, false) — Возвращать ключи индекса, а не сами документы. -
show_record_id(true, false) — Возвращать$recordIdдля каждого документа в наборе результатов. -
skip(Целое число) — Количество документов, которые необходимо пропустить перед возвратом результатов.
Агрегационные конвейеры
Аналогично, для агрегационных конвейеров структура JSON DSL должна быть такой:
{
"aggregate":{
"pipeline": [
// pipeline elements go here
],
"options": {
// pipeline options go here
}
}
} Где доступные параметры:
-
allowDiskUse(true, false) — Установите в значение true, если разрешено использование диска во время агрегации. -
batchSize(Целое число) — Количество документов для возврата в каждой порции. -
bypassDocumentValidation(true, false) — Пропускать ли проверку документов на уровне документа. -
collation(Объект) — Сортировка, используемая при запросе. -
comment(Строка) — Комментарий, предоставленный пользователем, который прикрепляется к этой команде. -
hint(Строка) — Индекс, используемый для агрегации. -
let(Объект) — Сопоставление переменных для использования в конвейере. Подробности см. в документации сервера. -
maxTimeMs(Целое число) — Максимальное время в миллисекундах для выполнения агрегации.
Миграция с фреймворка Ruby-коннектора
В рамках выпуска 8.8.0 коннектор MongoDB был перемещён из фреймворка Ruby-коннекторов в фреймворк Elastic-коннекторов.
Это изменение вносит незначительные изменения в форматирование данных, извлекаемых из MongoDB:
- Имя поля id вложенного объекта было изменено с "_id" на "id". Например, если у вас было поле "customer._id", теперь оно будет называться "customer.id".
- Формат даты был изменён с
YYYY-MM-DD'T'HH:mm:ss.fff'Z'наYYYY-MM-DD'T'HH:mm:ss
Если ваш коннектор MongoDB перестал работать после миграции с 8.7.x на 8.8.x, ознакомьтесь с решением проблемы, описанным в Известные проблемы. Если это не помогает, мы рекомендуем удалить индекс поиска, связанный с этим коннектором, и создать коннектор MongoDB заново.
Коннектор с самостоятельным управлением
Ссылка на просмотр самоуправляемого коннектора
Доступность и предварительные условия
Этот коннектор также доступен в виде самоуправляемого коннектора из фреймворка коннекторов Elastic. Для использования этого коннектора как самоуправляемого коннектора, необходимо выполнить все требования к самоуправляемым коннекторам.
Совместимость
Этот коннектор совместим с MongoDB Atlas и MongoDB 3.6 и более поздние версии.
Источник данных и ваше развертывание Elastic должны иметь возможность обмениваться данными друг с другом по сети.
Настройка
При использовании самоуправляемого коннектора, по умолчанию эти поля будут использовать настройки по умолчанию, установленные в исходном коде коннектора. Они устанавливаются в определении функции get_default_configuration.
Эти настраиваемые поля будут отображаться со своими соответствующими метками в пользовательском интерфейсе Kibana. После подключения вы сможете обновить эти значения в Kibana.
Для настройки коннектора необходимы следующие поля конфигурации:
-
host -
URI хоста MongoDB. Примеры:
-
mongodb+srv://my_username:my_password@cluster0.mongodb.net/mydb?w=majority -
mongodb://127.0.0.1:27017
-
-
user - Имя пользователя MongoDB, которое будет использоваться коннектором.
-
password - Пароль MongoDB, который будет использоваться коннектором.
Анонимная аутентификация поддерживается только в целях тестирования, но не должна использоваться в рабочей среде. Пропустите имя пользователя и пароль, чтобы использовать значения по умолчанию.
-
database - База данных MongoDB для синхронизации. База данных должна быть доступна с использованием указанного имени пользователя и пароля.
-
collection - Коллекция MongoDB для синхронизации. Коллекция должна существовать в указанной базе данных. Коллекция должна быть доступна с использованием указанного имени пользователя и пароля.
-
direct_connection - Использовать прямое соединение для клиента MongoDB. Значение по умолчанию:
False. -
ssl_enabled - Установить ли безопасное соединение с сервером MongoDB с использованием шифрования SSL/TLS. Убедитесь, что ваше развертывание MongoDB поддерживает подключения SSL/TLS. Включить, если ваш кластер MongoDB использует записи DNS SRV (в частности, пользователи MongoDB Atlas).
-
ssl_ca - Указывает корневой сертификат от Центра сертификации. Значение сертификата используется для проверки сертификата, представленного экземпляром MongoDB.
Пользователи Atlas могут оставить это поле пустым, потому что Atlas использует широко доверенный корневой ЦС.
-
tls_insecure - Пропускает различные проверки сертификатов (если SSL включен). Значение по умолчанию:
False.
Мы настоятельно рекомендуем отключить этот параметр в производственных средах.
Создание коннектора MongoDB
Использование пользовательского интерфейса
Чтобы создать новый коннектор MongoDB:
- В пользовательском интерфейсе Kibana перейдите на страницу Поиск → Содержимое → Коннекторы из основного меню или воспользуйтесь полем глобального поиска.
- Следуйте инструкциям по созданию нового MongoDB самоуправляемого коннектора.
Использование API
Вы можете использовать API Elasticsearch Создание коннектора API для создания нового самоуправляемого коннектора MongoDB.
Например:
resp = client.connector.put(
connector_id="my-{service-name-stub}-connector",
index_name="my-elasticsearch-index",
name="Content synced from {service-name}",
service_type="{service-name-stub}",
)
print(resp) const response = await client.connector.put({
connector_id: "my-{service-name-stub}-connector",
index_name: "my-elasticsearch-index",
name: "Content synced from {service-name}",
service_type: "{service-name-stub}",
});
console.log(response); PUT _connector/my-mongodb-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from MongoDB",
"service_type": "mongodb"
} Вам также потребуется создать ключ API для использования коннектором.
Пользователю необходимы права кластера manage_api_key, manage_connector и write_connector_secrets для программно генерации ключей API.
Чтобы создать ключ API для коннектора:
-
Выполните следующую команду, заменив указанные значения. Обратите внимание на возвращаемые значения
encodedиз ответа:resp = client.security.create_api_key( name="connector_name-connector-api-key", role_descriptors={ "connector_name-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": False } ] } }, ) print(resp)const response = await client.security.createApiKey({ name: "connector_name-connector-api-key", role_descriptors: { "connector_name-connector-role": { cluster: ["monitor", "manage_connector"], indices: [ { names: [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*", ], privileges: ["all"], allow_restricted_indices: false, }, ], }, }, }); console.log(response);POST /_security/api_key { "name": "connector_name-connector-api-key", "role_descriptors": { "connector_name-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": false } ] } } } - Обновите файл
config.ymlсо значением ключа APIencoded.
Подробную информацию обо всех доступных API коннекторов см. в документации API Elasticsearch.
Использование
Чтобы использовать этот коннектор как самоуправляемый коннектор, см. Самоуправляемые коннекторы. Дополнительные операции с коннекторами см. в Пользовательский интерфейс коннекторов в Kibana.
Пример
Пример доступен для этого коннектора. См. Учебное пособие по управляемому коннектору (MongoDB).
Известные проблемы
SSL должен быть включен для MongoDB Atlas
- Ошибка, внедрённая в 8.12.0, приводит к тому, что коннектор не синхронизирует URL Mongo Atlas (
mongo+srv), если SSL/TLS не включен.
Выражения и переменные в агрегационных конвейерах
Невозможно использовать выражения, такие как new Date() внутри агрегационного конвейера. Эти выражения не будут оцениваться базовым клиентом MongoDB, а будут переданы экземпляру MongoDB как строка. Возможным решением является использование переменных агрегации.
Неправильно (new Date() будет интерпретировано как строка):
{
"aggregate": {
"pipeline": [
{
"$match": {
"expiresAt": {
"$gte": "new Date()"
}
}
}
]
}
} Правильно (использование $$NOW):
{
"aggregate": {
"pipeline": [
{
"$addFields": {
"current_date": {
"$toDate": "$$NOW"
}
}
},
{
"$match": {
"$expr": {
"$gte": [
"$expiresAt",
"$current_date"
]
}
}
}
]
}
} Подключение с самозаверяющими или пользовательскими TLS-сертификатами CA
В настоящее время коннектор MongoDB не поддерживает работу с самозаверяющими или пользовательскими сертификатами CA при подключении к вашему самоуправляемому хосту MongoDB.
Следующее решение не должно использоваться в производственной среде.
Это можно обойти в средах разработки, добавив определенные параметры запроса к настроенному хосту.
Например, если ваш хост — mongodb+srv://my.mongo.host.com, добавление ?tls=true&tlsAllowInvalidCertificates=true позволит отключить проверку сертификатов TLS.
Полный хост в этом примере будет выглядеть следующим образом:
mongodb+srv://my.mongo.host.com/?tls=true&tlsAllowInvalidCertificates=true
Ошибка Docker-образа для версий 8.12.0 и 8.12.1
Ошибка, внедрённая в 8.12.0, приводит к ошибке Docker-образа коннекторов, если он запускается с MongoDB в качестве источника. Команда выведет ошибку cannot import name 'coroutine' from 'asyncio'. Эта проблема исправлена в версиях 8.12.2 и 8.13.0. Эта ошибка не влияет на управляемые коннекторы Elastic.
См. Известные проблемы для любых проблем, затрагивающих все коннекторы.
Поиск и устранение неполадок
См. Поиск и устранение неполадок.
Безопасность
См. Безопасность.
Развертывание с помощью Docker
Вы можете развернуть коннектор MongoDB как самоуправляемый коннектор с помощью Docker. Следуйте этим инструкциям.
Шаг 1: Скачать образец файла конфигурации
Скачайте образец файла конфигурации. Вы можете скачать его вручную или выполнить следующую команду:
curl https://raw.githubusercontent.com/elastic/connectors/main/config.yml.example --output ~/connectors-config/config.yml
Не забудьте обновить значение аргумента --output, если имя вашей директории отличается или вы хотите использовать другое имя файла конфигурации.
Шаг 2: Обновление файла конфигурации для вашего самообслуживаемого коннектора
Обновите файл конфигурации следующими параметрами, чтобы соответствовать вашей среде:
-
elasticsearch.host -
elasticsearch.api_key -
connectors
Если вы запускаете службу коннектора с помощью Docker-изображения Elasticsearch и Kibana, ваш файл конфигурации будет выглядеть следующим образом:
# When connecting to your cloud deployment you should edit the host value
elasticsearch.host: http://host.docker.internal:9200
elasticsearch.api_key: <ELASTICSEARCH_API_KEY>
connectors:
-
connector_id: <CONNECTOR_ID_FROM_KIBANA>
service_type: mongodb
api_key: <CONNECTOR_API_KEY_FROM_KIBANA> # Optional. If not provided, the connector will use the elasticsearch.api_key instead Использование elasticsearch.api_key — рекомендуемый метод аутентификации. Однако вы также можете использовать elasticsearch.username и elasticsearch.password для аутентификации с вашим экземпляром Elasticsearch.
Примечание: Вы можете изменить другие параметры по умолчанию, просто раскомментировав соответствующие настройки в файле конфигурации и изменив их значения.
Шаг 3: Запуск Docker-изображения
Запустите Docker-изображение с помощью службы коннектора, выполнив следующую команду:
docker run \ -v ~/connectors-config:/config \ --network "elastic" \ --tty \ --rm \ docker.elastic.co/enterprise-search/elastic-connectors:8.17.3 \ /app/bin/elastic-ingest \ -c /config/config.yml
Дополнительную информацию см. в DOCKER.md в репозитории elastic/connectors.
Найдите все доступные Docker-изображения в официальном репозитории.
У нас также есть вариант быстрого запуска самообслуживаемого коннектора с помощью Docker Compose, позволяющий одновременно запустить все необходимые службы: Elasticsearch, Kibana и службу коннекторов. Дополнительную информацию см. в README в репозитории elastic/connectors.
Документы и синхронизация
Ниже описано поведение по умолчанию для синхронизации этого коннектора. Используйте правила синхронизации и конвейеры обработки данных для настройки синхронизации для определенных индексов.
Все документы в настроенной базе данных и коллекции MongoDB извлекаются и преобразуются в документы в вашем индексе Elasticsearch.
- Коннектор создает один документ Elasticsearch для каждого документа MongoDB в настроенной базе данных и коллекции.
- Для каждого документа коннектор преобразует каждое поле MongoDB в поле Elasticsearch.
- Для каждого поля Elasticsearch динамически определяет тип данных.
Это приводит к документам Elasticsearch, которые тесно соответствуют исходным документам MongoDB.
Карта Elasticsearch создается при создании первого документа.
Каждая синхронизация является «полной». Для каждого найденного документа MongoDB:
- Если он не существует, документ создается в Elasticsearch.
- Если он уже существует в Elasticsearch, документ Elasticsearch заменяется, и версия увеличивается.
- Если существующий документ Elasticsearch больше не существует в коллекции MongoDB, он удаляется из Elasticsearch.
- Вложенные документы хранятся как поле
objectво вложенном документе.
Это рекурсивно, так как вложенные документы могут содержать вложенные документы.
- Файлы размером более 10 МБ не будут извлечены
- Разрешения не синхронизируются. Все индексированные документы в развертывании Elastic будут видны всем пользователям с доступом к этому развертыванию Elastic.
Правила синхронизации
В следующих разделах описаны правила синхронизации для этого коннектора.
Основные правила синхронизации идентичны для всех коннекторов и доступны по умолчанию.
Расширенные правила для MongoDB могут быть использованы для выражения запросов find или конвейеров агрегации. Они также могут быть использованы для настройки параметров, доступных при выполнении этих запросов/конвейеров.
find запросы
Для выполнения текстового поиска необходимо создать текстовый индекс в коллекции MongoDB.
Для запросов find структура этого JSON DSL должна выглядеть так:
{
"find":{
"filter": {
// find query goes here
},
"options":{
// query options go here
}
}
} Например:
{
"find": {
"filter": {
"$text": {
"$search": "garden",
"$caseSensitive": false
}
},
"skip": 10,
"limit": 1000
}
} Запросы find также поддерживают дополнительные параметры, например, объект projection:
{
"find": {
"filter": {
"languages": [
"English"
],
"runtime": {
"$gt":90
}
},
"projection":{
"tomatoes": 1
}
}
} Доступные параметры:
-
allow_disk_use(true, false) — Если установлено в true, сервер может записывать временные данные на диск при выполнении операции find. Этот параметр доступен только в версиях MongoDB сервера 4.4 и новее. -
allow_partial_results(true, false) — Позволяет запросу получать частичные результаты, если некоторые фрагменты недоступны. -
batch_size(Целое число) — Количество документов, возвращаемых в каждой порции результатов из MongoDB. -
filter(Объект) — Критерии фильтрации для запроса. -
limit(Целое число) — Максимальное количество документов, возвращаемых по запросу. -
max_time_ms(Целое число) — Максимальное время выполнения запроса в миллисекундах. -
no_cursor_timeout(true, false) — Сервер обычно отключает простаивающие курсоры после периода бездействия (10 минут) для предотвращения избыточного использования памяти. Установите этот параметр, чтобы предотвратить это. -
projection(Массив, Объект) — Поля для включения или исключения из каждого документа в наборе результатов. Если массив, он должен содержать по крайней мере один элемент. -
return_key(true, false) — Возвращать ключи индексов вместо документов. -
show_record_id(true, false) — Возвращать$recordIdдля каждого документа в наборе результатов. -
skip(Целое число) — Количество документов, которые нужно пропустить перед возвращением результатов.
Конвейеры агрегации
Аналогично, для конвейеров агрегации структура JSON DSL должна выглядеть так:
{
"aggregate":{
"pipeline": [
// pipeline elements go here
],
"options": {
// pipeline options go here
}
}
} Доступные параметры:
-
allowDiskUse(true, false) — Установите в true, если разрешено использование дискового пространства при агрегации. -
batchSize(Целое число) — Количество документов, возвращаемых в каждой порции. -
bypassDocumentValidation(true, false) — Пропускать ли проверку документов. -
collation(Объект) — Используемая сортировка. -
comment(Строка) — Комментарий, предоставленный пользователем для добавления к этой команде. -
hint(Строка) — Индекс для использования в агрегации. -
let(Объект) — Сопоставление переменных для использования в конвейере. Подробную информацию см. в документации сервера. -
maxTimeMs(Целое число) — Максимальное время выполнения агрегации в миллисекундах.
Миграция с фреймворка коннекторов Ruby
В рамках релиза 8.8.0 коннектор MongoDB был перенесен с фреймворка коннекторов Ruby на фреймворк Elastic коннекторов.
Это изменение вносит незначительные изменения в форматирование данных, извлеченных из MongoDB:
- Имя поля вложенного объекта id изменено с "_id" на "id". Например, если у вас было поле "customer._id", теперь оно будет называться "customer.id".
- Формат даты изменен с
YYYY-MM-DD'T'HH:mm:ss.fff'Z'наYYYY-MM-DD'T'HH:mm:ss
Если ваш коннектор MongoDB перестал работать после миграции с 8.7.x на 8.8.x, ознакомьтесь с решением, описанным в Известных проблемах. Если это не поможет, рекомендуется удалить индекс поиска, связанный с этим коннектором, и создать коннектор MongoDB заново.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/es-connectors-mongodb.html