2009-06-10 8 views
6

Ich arbeite an einer Unternehmenssuch-API mit Lucene. Meine Lucene Unternehmen Index hat 2 Unternehmen bekam: 1.Abigail Adams National Bancorp, Inc. 2.National BancorpSuche nach einer genauen Übereinstimmung mit der Lucene-Such-API

Wenn der Benutzer in National Bancorp, dann nur Unternehmen # 2 (. Dh Nationale Bancorp) sollte zurückgegeben und nicht # 1 ..... dh. Nur exakte Übereinstimmungen sollten zurückgegeben werden. Wie erreiche ich diese Funktionalität?

Danke fürs Lesen.

+0

Zukünftige Sucher: Wenn Sie nur einen Lucene-indizierten Dienst suchen, scheint die Antwort von Somonath Sabat ohne Upvotes in mindestens einer Instanz korrekt zu sein - setzen Sie den Ausdruck in Anführungszeichen. Verifiziert gegen musicbrainz. –

Antwort

11

Sie können KeywordAnalyzer verwenden, um dieses Feld zu indizieren und zu suchen. Keyword Analyzer generiert nur ein Token für die gesamte Zeichenfolge.

+0

Kannst du bitte diese beantworten? http://stackoverflow.com/questions/899542/problem-verwenden-same-instance-of-indexsearcher-for-multiple-requests –

1

Vielleicht möchten Sie Ihre Anforderungen überdenken, je nachdem, ob ich Ihre Frage richtig verstanden habe oder nicht. Entschuldige bitte, wenn ich dich falsch verstanden habe.

Nur ein wenig zum Nachdenken:

  • Wenn Sie nur genaue Matches zurückgegeben werden sollen, warum dann sind Sie in erster Linie der Suche?

  • Sind Sie sicher, dass der Benutzer genaue Übereinstimmungen erwartet? Ich suche normalerweise, dass die Suchmaschine fehlende Wörter berücksichtigt. in Ihrem Index

  • Angenommen, der Benutzer für Nationalbank aber Nationalbank nicht mehr gesucht. Würdest du immer noch wollen Abigail Adams National Bancorp, Inc von den Ergebnissen ausgeschlossen werden, einfach weil es keine exakte Übereinstimmung war?

Vor diesem Hintergrund würde ich vorschlagen, dass Sie alle mögliche Treffer (genau oder nicht) an den Benutzer präsentieren weiter und lassen sie für sich selbst entscheiden, welche für sie am besten geeignet ist. Ich sage das einfach, weil Sie vielleicht nicht so denken wie all Ihre Benutzer. Lucene wird dafür sorgen, dass die am besten passenden Ergebnisse in den Ergebnissen am höchsten platziert werden und ihnen so eine schnellere Auswahl ermöglichen.

1

Dies ist eine Garantie für die Verwendung des Schindelfilters. Dieser Filter fasst mehrere Wörter zusammen. Zum Beispiel würde Abigail Adams National Bancorp mit einem ShingleFilter von 3 Tokens produzieren (unter der Annahme eines einfachen WhitespaceAnalyzer) [Abigail], [Abigail Adams], [Abigail Adams National], [Adams National Bancorp], [Adams National], [Adams] , [National], [Nationales Bancorp] und [Bancorp].

Wenn ein Benutzer die Abfragen für National Bancorp, erhalten Sie eine genaue Übereinstimmung auf National Bancorp selbst, und eine niedrigere erzielte genaue Übereinstimmung auf Abigail Adams National Bancorp (niedriger gewertet, weil diese viel mehr Tokens im Feld hat, so Senken der IDF). Ich denke, es ist sinnvoll, beide Dokumente bei einer solchen Anfrage zurückzugeben.

Sie können den Schindelfilter je nach Anwendungsfall auch zur Abfragezeit anwenden.

1

Ich googelte viel ohne Hilfe für das gleiche Problem. Nachdem ich mich eine Weile am Kopf kratzt hatte, fand ich die Lösung. Suchen Sie die Zeichenfolge in doppelten Anführungszeichen, damit Ihr Problem gelöst wird.

National Bancorp wird sowohl # 1 als auch # 2 zurückgeben, aber "National Bancorp" wird nur # 2 zurückgeben.

Verwandte Themen