Elasticsearch - API del documento

Elasticsearch fornisce API per documenti singoli e API per più documenti, in cui la chiamata API mira rispettivamente a un singolo documento e più documenti.

API Index

Aiuta ad aggiungere o aggiornare il documento JSON in un indice quando viene effettuata una richiesta a quel rispettivo indice con una mappatura specifica. Ad esempio, la seguente richiesta aggiungerà l'oggetto JSON per indicizzare le scuole e la mappatura della scuola:

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Creazione automatica dell'indice

Quando viene effettuata una richiesta per aggiungere un oggetto JSON a un particolare indice e se tale indice non esiste, questa API crea automaticamente quell'indice e anche la mappatura sottostante per quel particolare oggetto JSON. Questa funzionalità può essere disabilitata modificando i valori dei seguenti parametri in false, che sono presenti nel file elasticsearch.yml.

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

È inoltre possibile limitare la creazione automatica dell'indice, dove è consentito solo il nome dell'indice con modelli specifici modificando il valore del parametro seguente:

action.auto_create_index:+acc*,-bank*

Note - Qui + indica consentito e - indica non consentito.

Controllo delle versioni

Elasticsearch fornisce anche funzionalità di controllo della versione. È possibile utilizzare un parametro di query della versione per specificare la versione di un particolare documento.

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Il controllo delle versioni è un processo in tempo reale e non è influenzato dalle operazioni di ricerca in tempo reale.

Esistono due tipi più importanti di controllo delle versioni:

Controllo delle versioni interno

Il controllo delle versioni interno è la versione predefinita che inizia con 1 e aumenta con ogni aggiornamento, eliminazioni incluse.

Controllo delle versioni esterno

Viene utilizzato quando il controllo delle versioni dei documenti è memorizzato in un sistema esterno come i sistemi di controllo delle versioni di terze parti. Per abilitare questa funzionalità, dobbiamo impostare version_type su external. Qui Elasticsearch memorizzerà il numero di versione come designato dal sistema esterno e non lo incrementerà automaticamente.

Tipo di operazione

Il tipo di operazione viene utilizzato per forzare un'operazione di creazione. Questo aiuta a evitare la sovrascrittura del documento esistente.

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Generazione automatica dell'ID

Quando l'ID non è specificato nell'operazione sull'indice, Elasticsearch genera automaticamente l'ID per quel documento.

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Ottieni API

L'API aiuta a estrarre un oggetto JSON di tipo eseguendo una richiesta get per un particolare documento.

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

{
   "_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"
   }
}
  • Questa operazione è in tempo reale e non viene influenzata dalla frequenza di aggiornamento dell'indice.

  • Puoi anche specificare la versione, quindi Elasticsearch recupererà solo quella versione del documento.

  • Puoi anche specificare _all nella richiesta, in modo che Elasticsearch possa cercare quell'ID documento in ogni tipo e restituirà il primo documento abbinato.

  • È inoltre possibile specificare i campi desiderati nel risultato di quel particolare documento.

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Puoi anche recuperare la parte di origine nel risultato aggiungendo semplicemente la parte _source nella tua richiesta get.

GET schools/_doc/5?_source

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

Puoi anche aggiornare lo shard prima di eseguire l'operazione get impostando il parametro di aggiornamento su true.

Elimina API

Puoi eliminare un particolare indice, mappatura o documento inviando una richiesta HTTP DELETE a Elasticsearch.

DELETE schools/_doc/4

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

È possibile specificare la versione del documento per eliminare quella particolare versione. È possibile specificare il parametro di instradamento per eliminare il documento da un particolare utente e l'operazione non riesce se il documento non appartiene a quel particolare utente. In questa operazione, puoi specificare le opzioni di aggiornamento e timeout come l'API GET.

Aggiorna API

Lo script viene utilizzato per eseguire questa operazione e il controllo delle versioni viene utilizzato per assicurarsi che non siano stati eseguiti aggiornamenti durante il recupero e la reindicizzazione. Ad esempio, puoi aggiornare le tasse scolastiche usando lo script -

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

Eseguendo il codice sopra, otteniamo il seguente risultato:

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

È possibile verificare l'aggiornamento inviando una richiesta get al documento aggiornato.