Elasticsearch предоставляет API для одного документа и API для нескольких документов, где вызов API нацелен на один документ и несколько документов соответственно.
Индекс API
Это помогает добавлять или обновлять документ JSON в индексе, когда делается запрос к этому соответствующему индексу с определенным отображением. Например, приведенный ниже запрос добавит объект JSON в индекс школ и при отображении школ.
POST http://localhost:9200/schools/school/4
Тело запроса
{ "name":"City School", "description":"ICSE", "street":"West End", "city":"Meerut", "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485], "fees":3500, "tags":["fully computerized"], "rating":"4.5" }
отклик
{ "_index":"schools", "_type":"school", "_id":"4", "_version":1, "_shards":{"total":2, "successful":1,"failed":0}, "created":true }
Автоматическое создание индекса
Когда делается запрос на добавление объекта JSON к определенному индексу, и если этот индекс не существует, этот API автоматически создает этот индекс, а также базовое отображение для этого конкретного объекта JSON. Эту функциональность можно отключить, изменив значения следующих параметров на false, которые присутствуют в файлеasticsearch.yml.
action.auto_create_index:false index.mapper.dynamic:false
Вы также можете ограничить автоматическое создание индекса, когда разрешено только имя индекса с конкретными шаблонами, изменив значение следующего параметра —
action.auto_create_index:+acc*,-bank*
(где + означает, что разрешено, а — означает, что не разрешено )
Versioning
Elasticsearch также предоставляет средства контроля версий. Мы можем использовать параметр запроса версии, чтобы указать версию конкретного документа. Например,
POST http://localhost:9200/schools/school/1?version = 1
Тело запроса
{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405], "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3" }
отклик
{ "_index":"schools", "_type":"school", "_id":"1", "_version":2, "_shards":{"total":2, "successful":1,"failed":0}, "created":false }
Есть два наиболее важных типа управления версиями; внутренняя версия — это версия по умолчанию, которая начинается с 1 и увеличивается с каждым обновлением, включая удаление. Номер версии может быть установлен снаружи. Чтобы включить эту функцию, нам нужно установить для version_type значение external.
Управление версиями происходит в режиме реального времени, и на него не влияют операции поиска в реальном времени.
Тип операции
Тип операции используется для форсирования операции создания, это помогает избежать перезаписи существующего документа.
POST http://localhost:9200/tutorials/chapter/1?op_type = create
Тело запроса
{ "Text":"this is chapter one" }
отклик
{ "_index":"tutorials", "_type":"chapter", "_id":"1", "_version":1, "_shards":{"total":2, "successful":1, "failed":0}, "created":true }
Автоматическая генерация ID
Если идентификатор не указан в операции индексации, то Elasticsearch автоматически генерирует идентификатор для этого документа.
Родители и дети
Вы можете определить родителя любого документа, передав идентификатор родительского документа в параметре запроса родительского URL.
POST http://localhost:9200/tutorials/article/1?parent = 1
Тело запроса
{ "Text":"This is article 1 of chapter 1" }
Примечание. Если при выполнении этого примера вы получили исключение, заново создайте индекс, добавив в него следующий текст.
{ "mappings": { "chapter": {}, "article": { "_parent": { "type": "chapter" } } } }
Тайм-аут
По умолчанию операция индексации будет ждать, пока основной сегмент не станет доступным в течение 1 минуты, прежде чем произойдет сбой и ответит с ошибкой. Это значение времени ожидания можно изменить явно, передав значение в параметр времени ожидания.
POST http://localhost:9200/tutorials/chapter/2?timeout = 3m
Тело запроса
{ "Text":"This is chapter 2 waiting for primary shard for 3 minutes" }
Получить API
API помогает извлечь объект типа JSON, выполнив запрос get для определенного документа. Например,
GET http://localhost:9200/schools/school/1
отклик
{ "_index":"schools", "_type":"school", "_id":"1", "_version":2, "found":true, "_source":{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385,76.8380405], "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3" } }
-
Эта операция выполняется в режиме реального времени и не зависит от частоты обновления индекса.
-
Вы также можете указать версию, тогда Elasticsearch будет извлекать только эту версию документа.
-
Вы также можете указать _all в запросе, чтобы Elasticsearch мог искать этот идентификатор документа в каждом типе, и он будет возвращать первый соответствующий документ.
-
Вы также можете указать поля, которые вы хотите в своем результате из этого конкретного документа.
Эта операция выполняется в режиме реального времени и не зависит от частоты обновления индекса.
Вы также можете указать версию, тогда Elasticsearch будет извлекать только эту версию документа.
Вы также можете указать _all в запросе, чтобы Elasticsearch мог искать этот идентификатор документа в каждом типе, и он будет возвращать первый соответствующий документ.
Вы также можете указать поля, которые вы хотите в своем результате из этого конкретного документа.
GET http://localhost:9200/schools/school/1?fields = name,fees
отклик
…………………….. "fields":{ "name":["Central School"], "fees":[2200] } ……………………..
- Вы также можете получить исходную часть в своем результате, просто добавив _source часть в свой запрос get.
GET http://localhost:9200/schools/school/1/_source
отклик
{ "name":"Central School", "description":"CBSE Afiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405], "fees":2200, "tags":["Senior Secondary", "beatiful campus"], "rating":"3.3" }
Вы также можете обновить осколок перед выполнением операции get, установив для параметра refresh значение true.
Удалить API
Вы можете удалить определенный индекс, сопоставление или документ, отправив запрос HTTP DELETE в Elasticsearch. Например,
DELETE http://localhost:9200/schools/school/4
отклик
{ "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2, "_shards":{"total":2, "successful":1, "failed":0} }
-
Версия документа может быть указана для удаления этой конкретной версии.
-
Параметр маршрутизации может быть указан для удаления документа от конкретного пользователя, и операция завершается ошибкой, если документ не принадлежит этому конкретному пользователю.
-
В этой операции вы можете указать параметры обновления и тайм-аута, аналогичные GET API.
Версия документа может быть указана для удаления этой конкретной версии.
Параметр маршрутизации может быть указан для удаления документа от конкретного пользователя, и операция завершается ошибкой, если документ не принадлежит этому конкретному пользователю.
В этой операции вы можете указать параметры обновления и тайм-аута, аналогичные GET API.
Обновить API
Сценарий используется для выполнения этой операции, а управление версиями используется для того, чтобы убедиться, что во время получения и повторного индексирования не было обновлений. Например, обновите плату за обучение, используя скрипт —
POST http://localhost:9200/schools_gov/school/1/_update
Тело запроса
{ "script":{ "inline": "ctx._source.fees+ = inc", "params":{ "inc": 500 } } }
отклик
{ "_index":"schools_gov", "_type":"school", "_id":"1", "_version":2, "_shards":{"total":2, "successful":1, "failed":0} }
Примечание. Если вы получаете исключение сценария, рекомендуется добавить следующие строки в elastcisearch.yml
script.inline: on script.indexed: on
Вы можете проверить обновление, отправив запрос на получение обновленного документа.
GET http://localhost:9200/schools_gov/school/1
Multi Get API
Он обладает той же функциональностью, что и GET API, но этот запрос get может возвращать более одного документа. Мы используем массив doc для указания индекса, типа и идентификатора всех документов, которые необходимо извлечь.
POST http://localhost:9200/_mget
Тело запроса
{ "docs":[ { "_index": "schools", "_type": "school", "_id": "1" }, { "_index":"schools_gev", "_type":"school", "_id": "2" } ] }
отклик
{ "docs":[ { "_index":"schools", "_type":"school", "_id":"1", "_version":1, "found":true, "_source":{ "name":"Central School", "description":"CBSE Afiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385,76.8380405], "fees":2000, "tags":["Senior Secondary", "beatiful campus"], "rating":"3.5" } }, { "_index":"schools_gev", "_type":"school", "_id":"2", "error":{ "root_cause":[{ "type":"index_not_found_exception", "reason":"no such index", "index":"schools_gev" }], "type":"index_not_found_exception", "reason":"no such index", "index":"schools_gev" } } ] }
Массовое API
Этот API-интерфейс используется для массовой загрузки или удаления объектов JSON путем выполнения нескольких операций индексации / удаления в одном запросе. Нам нужно добавить ключевое слово «_bulk» для вызова этого API. Пример этого API уже выполнен в заполненной статье Elasticsearch. Все остальные функции аналогичны GET API.