Каждый документ Lucene является рецептом, и каждый из этих рецептов имеет компоненты.
Я работаю для способности искать компоненты и дать результат, который говорит что два компонента, подобранные из четыре. (например),
Таким образом, как я могу добавить компоненты к документу? В solr я могу просто создать несколько полей, и он сохранил бы их всех, я мог бы делать что-то не так потому что его единственное сохранение одного компонента.
Также это относилось бы к полю как 'теги'.
p.s я использую Платформу Зенда для этого, если это имеет значение вообще.
Документы 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")
Вы не получите обратно 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")
Я вижу здесь два возможных подхода:
Я предлагаю вам попробовать второй подход и посмотреть, поможет ли он.