2016-05-04 13 views
0

Ich verwende Solr für eine Unternehmensanwendung. Bis jetzt funktioniert es gut, da ich ein Ngram-Feld verwende, um dagegen zu suchen. Es funktioniert ordnungsgemäß für Teilabfragen (Abgleich mit indizierten Ngrammen). Aber das Problem, das ich habe, ist, wie man genaue Abfragematches durchsetzt. Für ein Beispiel sollte die Abfrage "Test 1" genau mit dem gleichen Text übereinstimmen, wie er ist, wenn der Benutzer ihn in doppelte Anführungszeichen eingibt. Derzeit Seit ich einige Tokenizer und Filter verwendet habe, werden die doppelten Anführungszeichen ausgefiltert, es gibt keinen Unterschied in den Abfragen "test 1", "tEst 1" or "TEST 1" (das ist wegen der Analysator-Kette, die ich verwende, aber es ist notwendig, mit Ngrams und partielle Suche zu arbeiten).Solr Suche Best Practices

Derzeit suche ich nach einem Ngram-Abfrage-Feld. Um eine genaue Abfrage zu erzwingen, was soll ich tun? Was ist die beste Praxis? Derzeit denke ich, dass die doppelten Anführungszeichen auf der Client-Seite identifiziert werden müssen und das Abfragefeld in das ursprüngliche Feld geändert werden soll (ohne ngrams). Aber ich denke, es sollte einen besseren Weg geben, dies zu tun, da das Problem, das ich habe, generisch ist und solr ist eine komplette Enterprise-Level-Suchmaschine.

Antwort

0

Sie können eine andere field für sie haben und string als fieldType für die gleiche und indizieren mit gleichen hinzuzufügen.

Wenn Sie die genaue Übereinstimmung durchführen möchten, können Sie auf das obige Feld abfragen.

Und wenn Sie partielle Suche durchführen möchten .. Sie können Abfrage auf das frühere Feld, das von Ngram indiziert ist.

ODER .. Hier ist eine andere Möglichkeit, die Sie versuchen können.

Sie haben den aktuellen Feldtyp mit dem ngram definiert. Während der Indexierung können Sie den Ngram-Tokenizer definieren und für die Abfrage, die Sie erwähnen, keywordTokenizer und nur die Kleinbuchstaben-Filterfactory.

Während der Indexierung wird der Text in Token umgewandelt und während der Abfrage wird dies nicht durchgeführt.

+0

Also meinst du, ich sollte ich die Doppelzitate von der Client-Seite identifizieren und das Abfragefeld entsprechend ändern ?. Ich habe darüber nachgedacht, aber ist das nicht ein generisches Problem, dass Solr es schon gelöst haben könnte? Ich dachte, ich könnte das Rad neu erfinden – wattale

+0

@wattale: Bitte überprüfen Sie die Antwort Ich habe eine weitere Option hinzugefügt ... –

+0

Aber die Frage ist, wie kann ich damit umgehen, wenn der Benutzer absichtlich die Abfrage mit doppelten Zitaten eingeben ?. In Ihrem Ansatz müssen wir einen Mechanismus verwenden, um den Index zu normalisieren und beide abzufragen, dann gibt es keine Bedeutung der doppelten Zitate. Es sollte auch Groß- und Kleinschreibung beachten. Ich habe das PF-Feld im Edismax-Parser gefunden .. Ich schaue es mir an :) – wattale