2015-02-03 3 views
6

Gibt es eine Möglichkeit, die Speicherleistung bei Verwendung eines Elasticsearch Percolator Index zu verbessern?So optimieren Sie den Elasticsearch Percolator-Index Speicherleistung

Ich habe einen separaten Index für meinen Percolator erstellt. Ich habe ungefähr 1 000 000 von Benutzern erstellte Suchanfragen erstellt (für E-Mail-Benachrichtigungen). Nach dem Erstellen dieses Percolator-Indexes steigt meine Heap-Auslastung auf 100% und der Server reagiert nicht mehr auf Abfragen. Ich habe etwas begrenzte Ressourcen und bin nicht in der Lage, einfach mehr RAM auf das Problem zu werfen. Die einzige Lösung bestand darin, den Index zu löschen, der meine gespeicherten Suchen enthielt.

Von dem, was ich gelesen habe, befindet sich der Percolator-Index permanent im Speicher. Ist das völlig notwendig? Gibt es eine Möglichkeit, dieses Verhalten zu drosseln, aber dennoch die Funktionalität beizubehalten? Gibt es eine Möglichkeit, meine Daten/Abfragen/Indexstruktur zu optimieren, um dieses Verhalten zu umgehen und dennoch das gewünschte Ergebnis zu erzielen?

+0

Wie viel Speicher haben Sie Ihrem ElasticSearch-Server zugewiesen? –

+0

@DennisGorelik Ich habe 3 Knoten mit jeweils 16 GB und 8 GB Heap-Zuweisung. – richardpj

Antwort

0

Es gibt keine Lösung für dieses Problem aus Sicht von ElasticSearch noch eine ist wahrscheinlich. Ich habe direkt mit den Jungs von ElasticSearch gechattet und ihre Antwort lautet: "Wirf mehr Hardware drauf".

Ich habe jedoch einen Weg gefunden, um dieses Problem in Bezug auf die Verringerung meiner Nutzung dieser Funktion zu lösen. Als ich meine gespeicherten Suchdaten analysierte, stellte ich fest, dass meine Suchanfragen aus rund 100 000 eindeutigen Stichwortsuchen zusammen mit verschiedenen Filterpermutationen bestanden, die mehr als 1 000 000 Suchvorgänge ermöglichten.

Wenn ich die Filter sehen sind sie Dinge wie:

  • Location - 300+
  • Industrie - 50+
  • etc ...

Giving einen Lösungsraum :

100 000 *> 300 *> 50 * ... ~ => 1 500 000 000

Allerdings, wenn ich die Suche und Index, um die Keyword-Suche zu zersetzen war und filtere separat im Perkolator Index, ich mit weit weniger sucht am Ende:

100 000 +> 300 +> 50 + ... ~ => 100 350

Und diese Suchen selbst sind kleiner und weniger kompliziert als die ursprünglichen Suchen.

Jetzt erstelle ich einen zweiten (Nicht-Percolator) Index, der alle 1 000 000 gespeicherten Suchen auflistet und die IDs der Suchkomponenten aus dem Percolator-Index enthält.

Dann Perkolate ich ein Dokument und dann eine zweite Abfrage die Suche nach den Schlüsselwort und Filter Percolator Ergebnisse filtern. Ich bin sogar in der Lage, die Relevanz Punktzahl zu erhalten, da dies nur aus den Stichwortsuchen zurückgegeben wird.

Dieser Ansatz wird die Speicherkapazität meines Percolator-Indexspeichers erheblich reduzieren und gleichzeitig den gleichen Zweck erfüllen.

Ich möchte Feedback zu diesem Ansatz einladen (Ich habe es noch nicht versucht, aber ich werde Sie auf dem Laufenden halten).

Auch wenn mein Ansatz erfolgreich ist, denken Sie, es lohnt sich eine Feature-Anfrage?

Verwandte Themen