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

API de Documentos do Elasticsearch

O Elasticsearch oferece API de documento único e API de documentos múltiplos, onde as chamadas de API são realizadas para documentos únicos e múltiplos.

API de índice

Quando uma solicitação é feita para um índice correspondente com um mapeamento específico, isso ajuda a adicionar ou atualizar documentos JSON no índice. Por exemplo, a seguinte solicitação adicionará um objeto JSON ao índice escolas e ao mapeamento escola-

PUT escolas/_doc/5
{
   nome":"Escola da Cidade", "descrição":"ICSE", "rua":"Oeste",
   "cidade":"Meerut",
   "estado":"UP", "cep":"250002", "location":[28.9926174, 77.692485],
   "fees":3500,
   "tags":["completamente automatizado"], "rating":"4.5
}

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "schools",
   "_type": "_doc",
   "_id": ""5,
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   }
   "_seq_no": 2,
   "_primary_term": 1
}

Criação automática de índice

Quando a solicitação adiciona um objeto JSON a um índice específico, se o índice não existir, este API criará automaticamente o índice e o mapeamento básico do objeto JSON específico. Você pode desativar essa funcionalidade alterando os valores dos seguintes parâmetros existentes no arquivo elasticsearch.yml para false.

action.auto_create_index:false
index.mapper.dynamic:false

Você também pode limitar a criação automática de índices, alterando o valor dos seguintes parâmetros, permitindo apenas nomes de índices com padrões específicos-

action.auto_create_index:+conta*,-banco*

atençãoaqui + representa permitido, enquanto – representa não permitido.

Controle de versão

O Elasticsearch também oferece ferramentas de controle de versão. Podemos usar os parâmetros de consulta de versão para especificar a versão específica do documento.

PUT escolas/_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
}

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "schools",
   "_type": "_doc",
   "_id": ""5,
   "_version": 7,
   "result": "updated",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   }
   "_seq_no": 3,
   "_primary_term": 1
}

O controle de versão é um processo em tempo real e não é afetado pelas operações de busca em tempo real.

Existem dois tipos de controle de versão mais importantes-

Controle de versão interno

O controle de versão interno é o padrão, começando a partir de1começa e aumenta com cada atualização (incluindo exclusão).

Controle de versão externo

Quando o controle de versão do documento é armazenado em um sistema externo (como um sistema de controle de versão de terceiros), essa função é usada. Para ativar essa função, precisamos definir o version_type como external. Aqui, o Elasticsearch armazenará o número de versão especificado pelo sistema externo e não o incrementará automaticamente.

Tipo de operação

O tipo de operação é usado para forçar a execução da operação de criação. Isso ajuda a evitar a sobrescrita de documentos existentes.

PUT chapter/_doc/1?op_type=create
{
   "Text": "this is chapter one"
}

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "chapter"
   "_type": "_doc",
   "_id": ""1,
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   }
   "_seq_no": 0,
   "_primary_term": 1
}

Geração automática de ID

Se não for especificado ID na operação de índice, o Elasticsearch gerará automaticamente um ID para o documento.

POST chapter/_doc/
{
   "user": "tpoint"
   "post_date": ""2018-12-25T14:12:12,
   "message": "Elasticsearch Tutorial"
}

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "chapter"
   "_type": "_doc",
   "_id": "PVghWGoB"7LiDTeV6LSGu",
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   }
   "_seq_no": 1,
   "_primary_term": 1
}

Obter API

A API ajuda a extrair objetos JSON de tipo através de solicitações GET específicas para documentos.

pre class="prettyprint notranslate" > GET schools/_doc/5

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_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": [
         "Senior Secondary",
         "beautiful campus"
      ],
      "rating": ""3.3
   }
}
  • Esta operação é em tempo real e não é afetada pela taxa de atualização do índice.

  • Você também pode especificar a versão, então o Elasticsearch apenas obterá a versão do documento.

  • Você ainda pode especificar _all na solicitação para que o Elasticsearch possa procurar o ID do documento por tipo, retornando o primeiro documento correspondente.

  • 您还可以在特定文档的结果中指定所需的字段。

GET schools/_doc/5?_source_includes=name,fees

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "schools",
   "_type": "_doc",
   "_id": ""5,
   "_version": 7,
   "_seq_no": 3,
   "_primary_term": 1,
   "found": true,
   "_source": {
      "fees": " 2200,
      "name": "Central School"
   }
}

您还可以通过在get请求中添加_source部分来获取结果中的源部分。

GET schools/_doc/5?_source

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_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": [
         "Senior Secondary",
         "beautiful campus"
      ],
      "rating": ""3.3
   }
}

您还可以通过将refresh参数设置为true来刷新分片,然后再执行get操作。

删除API

您可以通过向Elasticsearch发送HTTP DELETE请求来删除特定的索引,映射或文档。

DELETE schools/_doc/4

Ao executar o código acima, obtemos os seguintes resultados-

{
   "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": "City Wise School"
      }
   }
 }

Ao executar o código acima, obtemos os seguintes resultados-

{
   "_index": "schools",
   "_type": "_doc",
   "_id": ""4,
   "_version": 3,
   "result": "updated",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   }
   "_seq_no": 4,
   "_primary_term": 2
}

Você pode verificar as atualizações enviando uma solicitação de obtenção para o documento atualizado.