/ / Kann man beim Einfügen eines Dokuments eine Antwort vom Perkolator erhalten? - elasticsearch

Kann man beim Einfügen eines Dokuments eine Antwort vom Perkolator erhalten? - elasticsearch

Bei der Suche nach einer Lösung, die es mir ermöglichtEinige Aktionen auslösen, wenn Daten eingefügt werden Ich habe die Percolator-API von Elasticsearch gefunden. Ich habe einige Seiten gelesen, bis ich erkannte, dass alle Abfragen, die die Percolator-API verwenden, GET verwenden.

Ist es der Fall für einen Anwendungsfall des EinlegensDokumente und möchten Sie wissen, welche Dokumente mit einer Abfrage übereinstimmen? Von den Seiten habe ich den Eindruck, ich müsste zuerst das Dokument einfügen und dann den Percolator-Index mit demselben Dokument fragen, ob er übereinstimmt. Oder gibt es einen Abfrageparameter oder ähnliches, damit elasticsearch die Percolator-Antwort in die Antwort einfügt, die ich vom Insert bekomme?

Antworten:

7 für die Antwort № 1

Angesichts Ihrer Frage glaube ich, dass Sie suchenelasticsearch 1.0, derzeit in Beta2 verfügbar. Dieses Detail ist wichtig, da der Perkolator in 1.0 neu geschrieben wurde und sich deutlich von dem in 0.90 verfügbaren unterscheidet.

Sie verwenden den Perkolator normalerweise zum Registrieren von Abfragen, die gespeichert werden. Anschließend können Sie ein Dokument durchsickern, um zu ermitteln, wie viele Abfragen es enthält, ohne es tatsächlich zu indizieren.

Was viele Leute brauchen, ist der zusätzliche Schritt vonIndizieren Sie das Dokument ebenfalls. Daher ist es schön, in derselben Anforderung sowohl Perkolation als auch Indexierung durchführen zu können, sodass Sie das Dokument sowohl indizieren als auch die entsprechenden Abfragen abrufen können das sogenannte Percolate während der Indizierung: Es ist das einzige Feature, das mit der Umschreibung auf 1.0 entfernt wurde, um die registrierten Abfragen besser verteilen und auch skalieren zu können.

Tatsächlich werden die Abfragen mit 0,90 in einem reservierten Index gespeichert _percolator, die immer 1 Shard hat und auto_expand_replica einstellen true. Das bedeutet, dass jeder Knoten alles enthältAbfragen, da dieser einzelne Shard automatisch auf alle Knoten repliziert wird. Der Hauptgrund dafür ist, dass, wenn Sie ein Dokument indizieren und gleichzeitig perkolieren möchten, um eine perfekte Ausführung zu erreichen, müssen Sie sicherstellen, dass die zwei Shards (Abfragen und Daten), die Sie treffen müssen, sind auf demselben Knoten. Wenn sich alle Abfragen auf allen Knoten befinden, ist dies garantiert. Percolate ist möglich, während die Indizierung möglich ist und schnell genug ist. Es gibt jedoch eine große Einschränkung, weshalb der Perkolator umgeschrieben wurde: Die Anzahl der Abfragen, die Sie registrieren können, ist begrenzt, da sie in einem einzigen Shard ablaufen.

Mit 1.0 können Sie Abfragen für einen beliebigen Index registrieren. Diese werden unter einem reservierten Typ registriert .percolator. Sie können dann sowohl mit Abfragen skalieren als auchSie befinden sich in einem normalen Index und Sie können die Anzahl der Shards definieren. Der Nachteil ist, dass Sie nicht eine vollständige Kopie der Abfragen auf jedem Knoten haben. Daher ist das Durchsickern während der Indizierung nicht möglich. Was Sie tun können, was gleichwertig ist, aber aus zwei Abfragen besteht, ist:

  1. Dokument indexieren
  2. das vorhandene Dokument durchlaufen lassen nach ID, ohne das gesamte Dokument erneut senden zu müssen

Schritt 2 kann direkt nach der Rückkehr der Indexoperation ausgeführt werden, da intern eine Get by-ID ausgeführt wird, die in Echtzeit funktioniert, sodass der Index weder gewartet noch aktualisiert werden muss.


0 für die Antwort № 2

Ich glaube, das wäre nicht möglich.

Von die Dokumentation..

Der _percolator, der das Repository registrierter Abfragen enthält, ist nur ein weiterer Index in ES.

Seit der percolator Ist ein anderer Index, müsste man ES mit einer anderen Abfrage ansprechen _percolator als Index.