2009-12-21 3 views
9

I Porter Stemmer bin mit den Worten Einhalt zu gebieten, und hier ist ein Problem in Ich bin mit:zend lucene Problem mit dem Wort „Hypothek“

Wort „Hypothek“ richtig dämmt „mortgag“ Wort „Hypothekengläubiger“ ist (wohl falsch) dämmt „Hypothek“

Es gibt ungefähr 100 Dokumente mit dem Wort „Hypothek“ Es gibt 1 Dokument mit Wort „Hypothekengläubiger“

Wenn ich einen Index ohne setzen "bauen Hypothekengläubiger "In allen Dokumenten funktioniert alles gut: Suche nach" Hypotheken "oder" Hypotheken "oder" Mor tgag "gibt alle 100 Dokumente zurück.

Wenn ich einen Index erstellen und eines der Dokumente enthält "Hypothekengläubiger", die Suche im Index für "Hypothek" gibt nur ein einziges Dokument mit "Hypothekengläubiger" (was auf "Hypothek" stammte) zurück. Die Suche nach "Hypotheken" oder "Hypotheken" gibt jedoch alle 100 Dokumente zurück.

Die einzige logische Schlussfolgerung, die ich aus diesem Problem ziehen kann, ist, dass Lucene zuerst nach dem Wort mit dem Vorstamm sucht, und wenn es keine Ergebnisse findet, sucht es weiter nach dem Stammwort. So findet man bei der Suche nach "Hypotheken" zuerst die "Hypothek", die vom "Hypothekengläubiger" stammt, und hört auf zu suchen. Ist das das richtige Verhalten oder ist es ein Fehler?

Antwort

1

Das klingt wie ein Fehler für mich. Ein Leitsatz der Lucene-Suche besagt: "Suchen Sie mit dem gleichen Analysator, den Sie für die Indizierung verwendet haben, es sei denn, Sie haben einen wirklich guten Grund, dies nicht zu tun". Nach der Analyse und Stemming sollte Lucene die gefundenen Suchbegriffe zurückgeben.

In Ihrem Fall wurde "Hypothek" während der Indizierung in "Hypothek" umgewandelt. Der Retrieval-Prozess sollte dies widerspiegeln und auch "Hypotheken" in "Hypotheken" umwandeln und dann die Übereinstimmungen für "Hypotheken" (die "Hypothek" darstellen) finden.

Es scheint, dass Sie während der Abfrage die Abfrage nicht eindämmen, was zu fehlerhaften Ergebnissen führt. Wenn diese Antwort unklar ist, bearbeiten Sie Ihre Frage und fügen Sie einige Zeilen Code hinzu, die beschreiben, wie Sie den Index erstellen und wie Sie ihn suchen.