Chciałbym przeszukać mój indeks na dwóch polach nazwanych "a" i "b". Dano mi wyszukiwań jak Freud -- theories of psychology
i chciałbym wykonać następujące zapytanie:Jak połączyć dwa zapytania Lucene za pomocą OR?
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
jaki sposób mogę to zrobić? Do tej pory mam Lucene konstruowania dwóch połówek (firstHalf
i secondHalf
) za pomocą MultiFieldQueryParser
, potem połączyliśmy je z
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
Ale combined
pozwala Wyniki zostać zwrócone gdzie tylko „teorie” zostanie znaleziony, a nie „psychologię” , gdzie zdecydowanie chcę obu terminów. Wygląda na to, że Lucene dzieli "teorie psychologiczne" na trzy słowa i łączy je indywidualnie z OR. Jak mogę temu zapobiec?
firstHalf
wygląda następująco:
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);
gdzie analyzer
tylko StandardAnalyzer
przedmiot.
właśnie powiedziano, że Lucene nie obsługuje logikę Boolean tak, i że powinni = lub!. W takim przypadku _Lucene w Action_ 2nd Edition jest źle na stronie 95. :) Więc teraz wiem, że moje zapytanie jest zepsute, po prostu nie wiem jak to naprawić. – dmn
Czy na pewno zapytanie jest prawidłowe? Kwerenda "teorie psychologii" oznacza, że przynajmniej jedno z tych trzech słów musi gdzieś wystąpić, ale żadne z nich nie jest słowem wymaganym. –
@KaiChan Nope, musiałem to zmodyfikować, aby wprowadzić to ograniczenie. Myślę, że dostałem to. :) – dmn