Me gustaría buscar mi índice en dos campos llamados "a" y "b". Me dan búsquedas como Freud -- theories of psychology
y me gustaría llevar a cabo la siguiente consulta:¿Cómo combino dos consultas de Lucene con OR?
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
¿Cómo se hace esto? Hasta ahora tengo Lucene la construcción de las dos mitades (firstHalf
y secondHalf
) utilizando MultiFieldQueryParser
, entonces los he combinado con
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
Pero combined
permite que los resultados serán devueltos en el que sólo "teorías" se encuentra y no "psicología" , donde definitivamente quiero ambos términos. Parece que Lucene está dividiendo las "teorías de la psicología" en tres palabras y combinándolas individualmente con O. ¿Cómo evito esto?
firstHalf
parece:
Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
new String[]{"Freud", "theories of psychology"},
new String[]{"a", "b"},
new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
analyzer);
donde analyzer
es sólo un objeto StandardAnalyzer
.
acaban de contar que Lucene no es compatible con la lógica booleana como esta, y que deberían = O!. En ese caso, _Lucene in Action_ 2nd Edition está equivocado en la página 95. :) Así que ahora sé _por qué_ mi consulta está quebrada, pero aún no sé cómo arreglarla. – dmn
¿Estás seguro de que la consulta es correcta? La consulta 'teorías de la psicología' significa que al menos una de las tres palabras debe ocurrir en algún lugar, pero ninguna de ellas es una palabra requerida. –
@KaiChan No, tuve que modificar esto para poner esa restricción. Creo que lo entendí. :) – dmn