Документы Lucene поддерживают добавление нескольких полей с одним и тем же именем. то есть вы можете повторно звонить:
document.add(new Field("name"), value)
Так ты должен был сделать:
# (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")
Вы получите обратно документ1. Но если вы ищете:
index.search("ingredient", "vanilla" && "apple")
Ты не вернешься document1 .
Если вы искали:
index.search("ingredient", "vanilla" || "apple")
Вы также получите обратно document1 .
Если вы хотите увидеть, какие ингредиенты соответствуют друг другу, вы можете просто сохранить поля в документе как Сохраненные поля, а затем для каждого соответствующего документа получить список полей и сравнить их с запросом пользователя.
Также обратите внимание, что по умолчанию PositionIncrementGap для полей с тем же именем, которые добавляются в документ, равно 0.
Это означает, что если вы добавили:
document1.add(new Field("ingredient"), "chocolate")
document1.add(new Field("ingredient"), "orange")
тогда это будет рассматриваться как отдельный ингредиент, называемый "шоколадный апельсин", который может соответствовать:
index.search("ingredient", "chocolate orange")
Вы можете избежать установки этого значения для PositionIncrementGap> 1, что приведет к:
0 соответствует:
index.search("ingredient", "chocolate orange")
и 1 соответствует:
index.search("ingredient", "chocolate" && "orange")