English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Elasticsearch предоставляет API для единичного документа и API для множества документов, где вызовы API направлены на отдельные документы и множество документов.
Когда запрашивается соответствующий индекс с специфическими мappings, это помогает добавить или обновить JSON-документы в индекс.Например, следующий запрос добавит JSON-объект в индекс "школы" и карту мappings "школы":
PUT schools/_doc/5 { 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": "_doc", "_id": "5", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no" : 2, "_primary_term": 1 }
Когда запрос добавляет JSON-объект в специфический индекс, если индекс не существует, эта API автоматически создает индекс и основную карту мappings для этого специфического JSON-объекта.Эта функция может быть отключена, изменяя значение следующих параметров в файле elasticsearch.yml: false
action.auto_create_index:false index.mapper.dynamic:false
Вы еще можете ограничить автоматическое создание индексов,изменяя значение следующих параметров, допуская только имена индексов с специфическими моделями:
action.auto_create_index:+acc*,-bank*
Внимание:此处 + означает разрешение,а – запрещение.
Elasticsearch еще предлагает инструменты контроля версий.Мы можем использовать параметры запроса версии для указания специфической версии документа.
PUT schools/_doc/5?version=7&version_type=external { "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": "_doc", "_id": "5", "_version": 7, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 3, "_primary_term": 1 }
Управление версиями является реальным процессом, не зависящим от операций реального поиска.
Есть два самых важных типа управления версиями -
Внутреннее управление версиями является defaultValue, начинающимся с 1 и увеличивающимся при каждом обновлении (включая удаление).
Эта функция используется, когда управление версиями документа хранится во внешней системе (например, в системе управления версиями третьей стороны). Чтобы включить эту функцию, нам нужно установить version_type в external. В этом случае Elasticsearch будет хранить номер версии, указанный внешней системой, и не будет автоматически его увеличивать.
Тип операции используется для принудительного выполнения операции создания, что помогает избежать замены существующего документа.
PUT chapter/_doc/1?op_type=create { "Text": "this is chapter one" }
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "chapter", "_type": "_doc", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
Если ID не указан в операции индекса, Elasticsearch автоматически сгенерирует ID для документа.
POST chapter/_doc/ { "user": "tpoint", "post_date": "2018-12-25T14:12:12", "message": "Elasticsearch Tutorial" }
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "chapter", "_type": "_doc", "_id": "PVghWGoB7LiDTeV6LSGu", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 }
API помогает извлечь объект JSON типа, выполняя get запрос на конкретный документ.
pre class="prettyprint notranslate" > GET schools/_doc/5
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "schools", "_type": "_doc", "_id": "5", "_version": 7, "_seq_no": 3, "_primary_term": 1, "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": [ "Средняя школа" "красивый кампус" ], "rating": "3.3" } }
Эта операция является реальной и не зависит от частоты обновления индекса.
Вы также можете указать версию, и тогда Elasticsearch будет получать только версию документа.
Вы также можете указать _all в запросе, чтобы Elasticsearch могла искать ID документа по каждому типу, и он вернет первый соответствующий документ.
Вы также можете указать необходимые поля в результатах конкретного документа.
GET schools/_doc/5?_source_includes=name,fees
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "schools", "_type": "_doc", "_id": "5", "_version": 7, "_seq_no": 3, "_primary_term": 1, "found": true, "_source": { "fees": 2200, "name": "Central School" } }
Вы также можете получить часть источника в результатах, добавив часть _source в запрос get.
GET schools/_doc/5?_source
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "schools", "_type": "_doc", "_id": "5", "_version": 7, "_seq_no": 3, "_primary_term": 1, "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": [ "Средняя школа" "красивый кампус" ], "rating": "3.3" } }
Вы также можете обновить дубликаты, установив параметр refresh в true, а затем выполнить операцию get.
Вы можете удалить конкретный индекс, карту или документ, отправив HTTP DELETE запрос в Elasticsearch.
DELETE schools/_doc/4
При выполнении上面的 кода, мы получили следующие результаты-
{ "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2, "_shards":{"total":2, "successful":1, "failed":0} }
Можете указать версию документа, чтобы удалить конкретную версию. Можете указать параметр маршрута, чтобы удалить документ у конкретного пользователя, и если документ не принадлежит этому конкретному пользователю, операция будет失败. В этой операции вы можете指定 параметры обновления и таймаут, как в GET API.
Сценарий используется для выполнения этой операции, контроль версий используется для обеспечения того, чтобы не произошло никаких обновлений при получении и повторном составлении индекса. Например, вы можете использовать сценарий для обновления платы за обучение-,
POST schools/_update/4 { "script": { "source": "ctx._source.name = params.sname", "lang": "painless", "params": { "sname": "Городская Школа" } } }
При выполнении上面的 кода, мы получили следующие результаты-
{ "_index": "schools", "_type": "_doc", "_id": "4", "_version": 3, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 4, "_primary_term": 2 }
Вы можете проверить обновления, отправив запрос на обновленную документацию.