ElasticSearch - gibt den vollständigen Wert einer Facette für eine Abfrage zurück

8

Ich habe kürzlich ElasticSearch verwendet. Ich versuche, einige Anwendungsfälle zu vervollständigen. Ich habe ein Problem für einen von ihnen.

Ich habe einige Benutzer mit ihrem vollen Namen indiziert (z. B. "Jean-Paul Gautier", "Jean De La Fontaine").

Ich versuche, alle vollständigen Namen als Antwort auf eine Abfrage zu erhalten.

Ich möchte zum Beispiel, dass die 100 häufigsten Vollnamen mit "J"

beginnen %Vor%

Das Ergebnis, das ich bekomme, sind alle Wörter der vollständigen Namen: "Jean", "Paul", "Gautier", "De", "La", "Fontaine".

Wie bekommt man "Jean-Paul Gautier" und "Jean De La Fontaine" (alle full_name Werte bitten um 'J')? Die Option "post_filter" tut dies nicht, sie beschränkt nur die obige Teilmenge.

  • Ich muss konfigurieren, "wie funktioniert" diese full_name Facette
  • Ich muss dieser aktuellen Abfrage einige Optionen hinzufügen
  • Ich muss etwas "Mapping" machen (für den Moment sehr unklar)

Danke

    
pierallard 27.01.2014, 15:34
quelle

2 Antworten

13

Sie müssen nur "index": "not_analyzed" für das Feld festlegen, und Sie können die vollständigen, unveränderten Feldwerte in Ihrer Facette abrufen.

Normalerweise ist es nett, eine Version des Feldes zu haben, die nicht analysiert wird (zum Facettieren) und eine andere, die (zum Suchen) ist. Der Feldtyp "multi_field" ist dafür nützlich.

In diesem Fall kann ich ein Mapping wie folgt definieren:

%Vor%

Hier haben wir zwei Unterfelder. Der Name mit dem Namen des übergeordneten Elements wird standardmäßig verwendet. Wenn Sie also nach dem Feld "full_name" suchen, verwendet Elasticsearch tatsächlich "full_name.full_name" . "full_name.untouched" gibt Ihnen die gewünschten Facettenergebnisse.

Als nächstes füge ich zwei Dokumente hinzu:

%Vor%

Und dann kann ich auf jedes Feld schauen, um zu sehen, was zurückgegeben wird:

%Vor%

und ich bekomme das folgende zurück:

%Vor%

Wie Sie sehen können, gibt das analysierte Feld Token mit einem Wort und einem niedrigeren Kästchen zurück (wenn Sie keinen Analysator angeben, wird Standardanalysator wird verwendet, und das nicht analysierte Unterfeld gibt den unmodifizierten Originaltext zurück.

Hier ist ein ausführbares Beispiel, mit dem Sie spielen können: Ссылка

    
Sloan Ahrens 27.01.2014, 15:52
quelle
2

Versuchen Sie, das Mapping für "full_name" zu ändern:

%Vor%

not_analyzed bedeutet, dass es beibehalten wird, wie es ist, Großbuchstaben, Leerzeichen, Bindestriche usw., so dass "Jean De La Fontaine" bleibt auffindbar und nicht in "Jean" "De" "La" "Fontaine"

Sie können mit verschiedenen Analysegeräten experimentieren, indem Sie die API verwenden

Beachten Sie, was der Standard zu einem Mehrteilnamen macht:

%Vor%     
mconlin 27.01.2014 15:47
quelle

Tags und Links