Взаимодействие с Подсистемой
С Подсистемой можно взаимодействовать с помощью REST API или одного из языковых клиентов Подсистемы. В этом разделе представлен REST API Подсистемы. Если нужно взаимодействовать с Подсистемой на требуемом языке программирования, используются библиотеки на JavaScript, Python, Ruby, Java, PHP, .NET, Go, Hadoop и Rust.
REST API
При взаимодействии с кластерами Подсистемы с помощью REST API можно изменять большинство настроек, модифицировать индексы, проверять работоспособность кластера, получать статистику и т.д. Возможно использование таких клиентов, как cURL, или любого языка программирования, который может отправлять HTTP-запросы.
Отправка HTTP-запросов возможна через терминал (п. Отправка запросов в терминале) или в консоли инструментов разработчика в "Панелях мониторинга" Подсистемы (п. Отправка запросов в инструментах разработки).
Отправка запросов в терминале
При отправке запросов cURL в терминале формат запроса зависит от того, используется ли плагин Security.
В качестве примера можно рассмотреть запрос к API состояния кластера без использования плагина Security:
curl -X GET "http://localhost:9200/_cluster/health"
Если используется плагин Security, следует указать имя пользователя и пароль в запросе:
curl -X GET "http://localhost:9200/_cluster/health" -ku admin:<custom-admin-password>
где:
- admin – имя пользователя по умолчанию;
- custom-admin-password – пароль, указанный в файле docker-compose.yml в настройке:
OPENSEACH_INITIAL_ADMIN_PASSWORD=<custom-admin-password>
Подсистема обычно возвращает ответы в плоском формате JSON по умолчанию. Для получения ответа в удобочитаемом для человека формате следует указать параметр запроса pretty:
curl -X GET "https://localhost:9200/_cluster/health?pretty"
Для запросов, содержащих тело, нужно указать заголовок Content-Type и предоставить полезную нагрузку запроса в параметре -d (данные):
curl -X GET "https://localhost:9200/employees/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": {}
}
}'
Отправка запросов в инструментах разработки
В консоли "Инструменты разработки" в "Панелях мониторинга" Подсистемы используется более простой синтаксис для форматирования REST-запросов по сравнению с командой cURL. Чтобы отправлять запросы в "Инструменты разработки", нужно выполнить следующие действия:
- чтобы получить доступ к "Панелям мониторинга" Подсистемы, открыть адрес
https://localhost:5601/в веб-браузере на том же хосте, на котором работает кластер Подсистемы. Имя пользователя по умолчанию — admin, а пароль указан в файле docker-compose.yml в разделе настроек: - в верхней строке меню перейти в "*";
- в левой панели консоли ввести следующий запрос:
- чтобы отправить запрос, нажать значок запуска в правом верхнем углу запроса. Также можно отправить запрос, нажав клавиши Ctrl+Enter.
OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password>;
GET _cluster/health
Индексирование документов
Чтобы добавить документ JSON в индекс Подсистемы (то есть индексировать документ), нужно отправить HTTP-запрос со следующим заголовком:
PUT https://<host>:<port>/<index-name>/_doc/<document-id>
После отправки запроса Подсистема создает индекс под названием <index-name> и сохраняет загруженный документ в этом индексе. Если не указать идентификатор документа <document-id>, Подсистема сгенерирует его.
Динамическое сопоставление
При индексировании документа Подсистема определяет типы полей на основе типов JSON, указанных в документе. Этот процесс называется динамическим сопоставлением.
Чтобы просмотреть предполагаемые типы полей, нужно отправить запрос в endpoint _mapping:
GET /<index-name>/_mapping
Подсистема выдает ответ полем type для каждого поля:
{
"<index-name>": {
"mappings": {
"properties": {
"gpa": {
"type": "float"
},
{
"grad_year": {
"type": "long"
},
{
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
Подсистемой сопоставлены числовые поля с типами float и long. Следует обратить внимание, что Подсистемой сопоставлено текстовое поле name с типом text и добавлено подполе name.keyword с типом keyword. Поля, сопоставленные с типом text, анализируются (преобразуются в нижний регистр и разделяются на термины) и могут использоваться для полнотекстового поиска. Поля, сопоставленные с типом keyword, используются для поиска по точному соответствию.
Подсистемой сопоставлено поле grad_year с long. Если требуется сопоставить его с типом date вместо этого, нужно удалить индекс, а затем создать его заново, явно указав сопоставления.
Поиск документов
Чтобы выполнить поиск документа, нужно указать индекс, по которому выполняется поиск, и запрос, который будет использоваться для сопоставления документов. Самый простой запрос — это запрос match_all, который сопоставляет все документы в индексе:
GET //<index-name>/_search
{
"query": {
"match_all": {}
}
В результате Подсистема возвращает проиндексированный документ.
Обновление документов
В Подсистеме документы являются неизменяемыми, но можно обновить документ, получив его, обновив его информацию и повторно проиндексировав. Возможно обновить весь документ с помощью API-индексирования документов, указав значения для всех существующих и добавленных полей в документе.
Удаление документа
Чтобы удалить документ, нужно отправить запрос на удаление и указать идентификатор документа:
DELETE <index-name>/_doc/<document-id>
Удаление индекса
Чтобы удалить индекс, нужно отправить следующий запрос:
DELETE <index-name>
Сопоставления индексов и настройки
Индексы Подсистемы настраиваются с помощью сопоставлений и настроек:
- Сопоставление — это набор полей и типов этих полей;
- Настройки включают такие данные об индексе, как имя индекса, дата создания и количество сегментов.
Возможно указать сопоставления и настройки в одном запросе.
Следует обратить внимание, что после создания поля нельзя изменить его тип. Для изменения типа поля необходимо удалить индекс и создать его заново с новыми сопоставлениями.