Lucene-Dokumente unterstützen das Hinzufügen mehrerer Felder mit demselben Namen. das heißt Sie können immer wieder rufen:
document.add(new Field("name"), value)
So waren Sie zu tun:
# (pseudo-code)
document1.add(new Field("ingredient"), "vanilla")
document1.add(new Field("ingredient"), "strawberry")
index.add(document)
# And then search for
index.search("ingredient", "vanilla" && "strawberry")
Sie document1 zurück. Aber wenn Sie die Suche nach:
index.search("ingredient", "vanilla" && "apple")
Sie werden nicht wieder document1.
Wenn Sie suchten nach:
index.search("ingredient", "vanilla" || "apple")
Sie auch zurück document1 bekommen würde.
Wenn Sie sehen möchten, welche Zutaten übereinstimmen, können Sie einfach die Felder im Dokument als Gespeicherte Felder speichern und dann für jedes übereinstimmende Dokument die Liste der Felder abrufen und mit der Benutzerabfrage vergleichen.
Beachten Sie auch, PositionIncrementGap standardmäßig für Felder mit demselben Namen, die zu einem Dokument hinzugefügt werden, ist 0.
Das bedeutet, dass, wenn Sie hinzugefügt:
document1.add(new Field("ingredient"), "chocolate")
document1.add(new Field("ingredient"), "orange")
dann wäre es so behandelt werden, wenn es sich um eine einzelne Zutat „Schokolade orange“ genannt wurden, die auf passen könnte:
index.search("ingredient", "chocolate orange")
Sie vermeiden können Dies setzt einen Wert für PositionIncrementGap> 1, der folgendes ergibt:
0 Ergebnisse für:
index.search("ingredient", "chocolate orange")
und 1 Spiel für:
index.search("ingredient", "chocolate" && "orange")