Elasticsearch: API de documentos

Elasticsearch proporciona API de un solo documento y API de varios documentos, donde la llamada a la API se dirige a un solo documento y a varios documentos, respectivamente.

API de índice

Ayuda a agregar o actualizar el documento JSON en un índice cuando se realiza una solicitud a ese índice respectivo con una asignación específica. Por ejemplo, la siguiente solicitud agregará el objeto JSON a las escuelas indexadas y en el mapeo de la escuela:

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"
}

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

Creación automática de índices

Cuando se realiza una solicitud para agregar un objeto JSON a un índice en particular y si ese índice no existe, esta API crea automáticamente ese índice y también la asignación subyacente para ese objeto JSON en particular. Esta funcionalidad se puede desactivar cambiando los valores de los siguientes parámetros a falso, que están presentes en el archivo elasticsearch.yml.

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

También puede restringir la creación automática de índice, donde solo se permite el nombre del índice con patrones específicos cambiando el valor del siguiente parámetro:

action.auto_create_index:+acc*,-bank*

Note - Aquí + indica permitido y - indica no permitido.

Control de versiones

Elasticsearch también proporciona una función de control de versiones. Podemos usar un parámetro de consulta de versión para especificar la versión de un documento en particular.

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"
}

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

El control de versiones es un proceso en tiempo real y no se ve afectado por las operaciones de búsqueda en tiempo real.

Hay dos tipos de control de versiones más importantes:

Versiones internas

El control de versiones interno es la versión predeterminada que comienza con 1 y aumenta con cada actualización, incluidas las eliminaciones.

Versionado externo

Se utiliza cuando el control de versiones de los documentos se almacena en un sistema externo como sistemas de control de versiones de terceros. Para habilitar esta funcionalidad, necesitamos establecer version_type en external. Aquí Elasticsearch almacenará el número de versión designado por el sistema externo y no los incrementará automáticamente.

Tipo de operación

El tipo de operación se usa para forzar una operación de creación. Esto ayuda a evitar la sobrescritura de documentos existentes.

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

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

Generación automática de ID

Cuando no se especifica el ID en la operación de índice, Elasticsearch genera automáticamente el ID para ese documento.

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

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

Obtener API

La API ayuda a extraer un objeto JSON de tipo mediante la realización de una solicitud de obtención para un documento en particular.

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

Al ejecutar el código anterior, obtenemos el siguiente resultado:

{
   "_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 operación es en tiempo real y no se ve afectada por la frecuencia de actualización de Index.

  • También puede especificar la versión, luego Elasticsearch buscará solo esa versión del documento.

  • También puede especificar _all en la solicitud, de modo que Elasticsearch pueda buscar esa identificación de documento en cada tipo y devolverá el primer documento coincidente.

  • También puede especificar los campos que desee en su resultado de ese documento en particular.

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

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

También puede recuperar la parte de origen en su resultado simplemente agregando _source part en su solicitud de obtención.

GET schools/_doc/5?_source

Al ejecutar el código anterior, obtenemos el siguiente resultado:

{
   "_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"
   }
}

También puede actualizar el fragmento antes de realizar la operación de obtención si establece el parámetro de actualización en verdadero.

Eliminar API

Puede eliminar un índice, una asignación o un documento en particular enviando una solicitud HTTP DELETE a Elasticsearch.

DELETE schools/_doc/4

Al ejecutar el código anterior, obtenemos el siguiente resultado:

{
   "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}

Se puede especificar la versión del documento para eliminar esa versión en particular. El parámetro de enrutamiento se puede especificar para eliminar el documento de un usuario en particular y la operación falla si el documento no pertenece a ese usuario en particular. En esta operación, puede especificar la opción de actualización y tiempo de espera igual que GET API.

Actualizar API

El script se usa para realizar esta operación y el control de versiones se usa para asegurarse de que no se hayan realizado actualizaciones durante la obtención y reindexación. Por ejemplo, puede actualizar las tarifas de la escuela usando script -

POST schools/_update/4
{
   "script" : {
      "source": "ctx._source.name = params.sname",
      "lang": "painless",
      "params" : {
         "sname" : "City Wise School"
      }
   }
 }

Al ejecutar el código anterior, obtenemos el siguiente resultado:

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

Puede verificar la actualización enviando una solicitud de obtención al documento actualizado.