Elasticsearch - Dokument-APIs
Elasticsearch bietet APIs für einzelne Dokumente und APIs für mehrere Dokumente, wobei der API-Aufruf auf ein einzelnes Dokument bzw. mehrere Dokumente abzielt.
Index-API
Es ist hilfreich, das JSON-Dokument in einem Index hinzuzufügen oder zu aktualisieren, wenn eine Anforderung an den jeweiligen Index mit einer bestimmten Zuordnung erfolgt. Mit der folgenden Anforderung wird beispielsweise das JSON-Objekt zu Indexschulen und unter Schulzuordnung hinzugefügt:
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"
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
Automatische Indexerstellung
Wenn eine Anforderung zum Hinzufügen eines JSON-Objekts zu einem bestimmten Index gestellt wird und dieser Index nicht vorhanden ist, erstellt diese API automatisch diesen Index und auch die zugrunde liegende Zuordnung für dieses bestimmte JSON-Objekt. Diese Funktionalität kann deaktiviert werden, indem die Werte der folgenden Parameter in false geändert werden, die in der Datei elasticsearch.yml enthalten sind.
action.auto_create_index:false
index.mapper.dynamic:false
Sie können auch die automatische Erstellung von Indizes einschränken, bei denen nur Indexnamen mit bestimmten Mustern zulässig sind, indem Sie den Wert des folgenden Parameters ändern:
action.auto_create_index:+acc*,-bank*
Note - Hier bedeutet + erlaubt und - zeigt nicht erlaubt an.
Versionierung
Elasticsearch bietet auch eine Versionskontrollfunktion. Wir können einen Versionsabfrageparameter verwenden, um die Version eines bestimmten Dokuments anzugeben.
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"
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
Die Versionierung ist ein Echtzeitprozess und wird von den Echtzeitsuchvorgängen nicht beeinflusst.
Es gibt zwei wichtige Arten der Versionierung:
Interne Versionierung
Die interne Versionierung ist die Standardversion, die mit 1 beginnt und mit jedem Update erhöht wird, einschließlich Löschvorgängen.
Externe Versionierung
Es wird verwendet, wenn die Versionierung der Dokumente in einem externen System wie Versionssystemen von Drittanbietern gespeichert wird. Um diese Funktionalität zu aktivieren, müssen wir version_type auf external setzen. Hier speichert Elasticsearch die vom externen System festgelegte Versionsnummer und erhöht diese nicht automatisch.
Operationstyp
Der Operationstyp wird verwendet, um eine Erstellungsoperation zu erzwingen. Dies hilft, das Überschreiben eines vorhandenen Dokuments zu vermeiden.
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Automatische ID-Generierung
Wenn im Indexvorgang keine ID angegeben wird, generiert Elasticsearch automatisch eine ID für dieses Dokument.
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
API abrufen
Die API hilft beim Extrahieren eines JSON-Objekts vom Typ, indem eine Abrufanforderung für ein bestimmtes Dokument ausgeführt wird.
pre class="prettyprint notranslate" > GET schools/_doc/5
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_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"
}
}
Dieser Vorgang erfolgt in Echtzeit und wird von der Aktualisierungsrate des Index nicht beeinflusst.
Sie können auch die Version angeben. Dann ruft Elasticsearch nur diese Version des Dokuments ab.
Sie können auch _all in der Anforderung angeben, damit die Elasticsearch in jedem Typ nach dieser Dokument-ID suchen kann und das erste übereinstimmende Dokument zurückgibt.
Sie können auch die Felder angeben, die in Ihrem Ergebnis aus diesem bestimmten Dokument enthalten sein sollen.
GET schools/_doc/5?_source_includes=name,fees
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
Sie können den Quellteil auch in Ihrem Ergebnis abrufen, indem Sie einfach _source part in Ihre get-Anfrage einfügen.
GET schools/_doc/5?_source
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_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"
}
}
Sie können den Shard auch vor dem Abrufen aktualisieren, indem Sie den Aktualisierungsparameter auf true setzen.
API löschen
Sie können einen bestimmten Index, eine bestimmte Zuordnung oder ein bestimmtes Dokument löschen, indem Sie eine HTTP-DELETE-Anforderung an Elasticsearch senden.
DELETE schools/_doc/4
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
Die Version des Dokuments kann angegeben werden, um diese bestimmte Version zu löschen. Der Routing-Parameter kann angegeben werden, um das Dokument von einem bestimmten Benutzer zu löschen. Der Vorgang schlägt fehl, wenn das Dokument nicht zu diesem bestimmten Benutzer gehört. In diesem Vorgang können Sie die Aktualisierungs- und Timeout-Option wie bei der GET-API angeben.
API aktualisieren
Für diesen Vorgang wird ein Skript verwendet, und durch die Versionierung wird sichergestellt, dass während des Abrufens und erneuten Indexierens keine Aktualisierungen vorgenommen wurden. Zum Beispiel können Sie die Schulgebühren mithilfe eines Skripts aktualisieren -
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
Sie können das Update überprüfen, indem Sie eine Get-Anfrage an das aktualisierte Dokument senden.