English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Документация API Elasticsearch

Elasticsearch предоставляет API для единичного документа и 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

Если 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

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.

Удаление API

Вы можете удалить конкретный индекс, карту или документ, отправив 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.

Обновление 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
}

Вы можете проверить обновления, отправив запрос на обновленную документацию.