Документы 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")
вы получите обратно Document1. Но если вы ищете:
index.search("ingredient", "vanilla" && "apple")
Вы не получите обратно документа1.
Если вы искали:
index.search("ingredient", "vanilla" || "apple")
Вы также можете получить обратно документ1.
Если вы хотите увидеть, какие ингредиенты соответствуют, вы можете просто сохранить поля в документе как Сохраненные поля, а затем для каждого соответствующего документа получить список полей и сравнить их с запросом пользователя.
Также обратите внимание, что по умолчанию 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")