2012-06-06 12 views
5

Ich werte Elastic Search für einen Client aus. Ich habe begonnen, mit der API zu spielen und erfolgreich einen Index erstellt und der Suche Dokumente hinzugefügt. Der Hauptgrund für die Verwendung der Elastic Search besteht darin, dass sie Facettenfunktionen bereitstellt.Elastische Suchanalysatoren und Facetten

Ich habe Probleme zu verstehen Analyzer, Tokenizer und Filter und wie passen sie in Facetten. Ich möchte Schlüsselwörter, Daten, Suchbegriffe usw. als meine Facetten verwenden können.

Wie würde ich Analysatoren in meine Suche integrieren und wie kann ich sie mit Facetten verwenden?

Antwort

9

Wenn Elastic Search standardmäßig eine Zeichenfolge indexiert, werden sie normalerweise in Token aufgeteilt, zum Beispiel: "Fox springt über die Wand" wird in einzelne Wörter wie "Fox", "springen", "über" , "die Mauer".

Also was macht das? Wenn Sie Ihre Dokumente mit der Lucene-Abfrage durchsuchen, erhalten Sie möglicherweise nicht die gewünschte Zeichenfolge, da Elastic Search automatisch nach tokenisierten Wörtern anstelle der gesamten Zeichenfolge sucht. Dadurch werden Ihre Suchergebnisse stark beeinträchtigt.

Wenn Sie beispielsweise nach "Fox jump over the wall" suchen, erhalten Sie kein Ergebnis. Wenn Sie stattdessen nach "Fox" suchen, erhalten Sie ein Ergebnis.

Die Analysieren API oder die Analyse Begriff sagt Elasticsearch nicht die indizierte String tokenize, so dass Sie richtig für die exakte Zeichenketten suchen können, was besonders nützlich ist, wenn Sie statistische Facetten gesamten tun wollen Saiten.

Tokenizer Tokenize Zeichenketten nur in einzelne Wörter und speichert sie in der elastischen Suche. Wie erwähnt, können diese Token gegen die Verwendung der Such-API abgefragt werden.

Filter Erstellen Sie eine Teilmenge Ihres abgefragten Ergebnisses unter bestimmten Bedingungen, die Sie angeben, und helfen Ihnen so, das, was Sie brauchen, von dem zu trennen, was Sie nicht in Ihren Suchergebnissen benötigen.

+0

Sie können tun "Fox über die Mauer springen" und es wird Ihnen die richtigen Ergebnisse mit allen Wörtern zurückgeben, wenn Sie es als Abfrage tun: 'client.prepareSearch(). SetQuery (QueryBuilders.matchQuery (NODE_PATH_TO_SEARCH, "Fox springt über die Mauer")). Für mich scheint es, AND-Ergebnisse basierend auf den Wörtern in der Abfrage-Zeichenfolge übergeben – Adrian