Los documentos de Lucene admiten la adición de múltiples campos con el mismo nombre. es decir, se puede llamar en repetidas ocasiones:
document.add(new Field("name"), value)
Así eran que hagas:
# (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")
Va a volver documento1. Pero si se busca:
index.search("ingredient", "vanilla" && "apple")
Usted no va a volver documento1.
Si buscado:
index.search("ingredient", "vanilla" || "apple")
También tendría que volver documento1.
Si desea ver qué ingredientes coinciden puede simplemente guardar los campos en el documento como Almacenado campos, y luego para cada documento coincidente recuperar la lista de campos y compararlos con la consulta del usuario.
También tenga en cuenta que, de forma predeterminada, PositionIncrementGap para los campos con el mismo nombre que se agregan a un documento es 0.
Esto significa que si se ha añadido:
document1.add(new Field("ingredient"), "chocolate")
document1.add(new Field("ingredient"), "orange")
entonces sería tratada como si se tratara de un único ingrediente llamado "chocolate de naranja", que podría coincidir en:
index.search("ingredient", "chocolate orange")
Usted puede evitar este conjunto un valor para PositionIncrementGap> 1, lo que dió:
0 coincidencias para:
index.search("ingredient", "chocolate orange")
y 1 resultado para:
index.search("ingredient", "chocolate" && "orange")