Czy ktoś może wyjaśnić różnicę między BooleanClause.Occur.Must i BooleanClause.Occur.SHOULD w lucene w BooleanQuery z przykładem?Różnica między BooleanClause.Occur.Must a BooleanClause.Occur.SHOULD w lucene
Odpowiedz
BooleanClause.Occur.SHOULD
oznacza, że klauzula jest opcjonalna, natomiast BooleanClause.Occur.Must
oznacza, że klauzula jest obowiązkowa.
Jeśli jednak zapytanie boolowskie zawiera tylko klauzule opcjonalne, przynajmniej jedna klauzula musi być zgodna, aby dokument pojawił się w wynikach.
Dla lepszej kontroli nad jakie dokumenty dopasować BooleanQuery, istnieje również minimumShouldMatch parametr, który pozwala powiedzieć Lucene że przynajmniej minimumShouldMatch
BooleanClause.Occur.SHOULD
klauzule muszą być zgodne z dokumentem pojawiać się w wynikach.
postaram się wyjaśnić na przykładzie:
Załóżmy, że istnieją dwie klauzule: Klauzula A i B. Klauzula Teraz efekt BooleanClause.Occur będzie wyglądał następująco:
W pierwszym przypadku oba klauzule A i B mają ustawioną flagę BooleanClause.Occur.Should. Oznacza to, że nawet jeśli jedna z klauzul zostanie spełniona (A lub B), dokument będzie trafiony.
W drugim przypadku klauzula A ma ustawienie BooleanClause.Occur.Must, a klauzula B ma ustawioną wartość BooleanClause.Occur.Should.
W tym przypadku dokument będzie hitem, gdy "będzie" spełniać klauzulę A. To, czy ten dokument spełnia klauzulę B, czy też nie, nie będzie miało wpływu na jej trafienie.
Ale jeśli dokument nie spełnia warunku A, to bez względu na to, czy spełnia warunek B, nie będzie trafiony.
W trzecim przypadku zarówno klauzula A, jak i klauzula B mają ustawioną flagę BooleanClause.Occur.Must.
W tym przypadku dokument będzie hitem, tylko wtedy, gdy będzie spełniał "oba" klauzule. Jeśli nie uda się spełnić choćby jednego z warunków, to nie będzie to trafienie.
Klauzula POWINNIJ jest najważniejszą cechą w Lucinie, gdy najważniejszą sprawą jest RANKING!
Kiedy używasz klauzuli POWŁOKA Lucene porządkuje pobrany dokument przez sumę punktów klauzuli POWIĘKSZ. W ten sposób możesz dołączyć do zapytania razem z klauzulą SHOULD z różnymi boostami (zgodnie z ich znaczeniem). Jest to koncepcja kryjąca się za ExtendedDismaxQuery w Solr.
BooleanClause.Occur.Must
oznacza obowiązkową klauzulę. Klauzula powinna zostać spełniona, aby wynik został zwrócony. Zasadniczo AND
.
BooleanClause.Occur.SHOULD
oznacza opcjonalnej klauzuli i będzie zachowywać się jak OR
Według tej dokumentacji Lucene [] (http://lucene.apache.org/core/3_5_0/api/core/org/apache/lucene /search/BooleanQuery.html#setMinimumNumberShouldMatch%28int%29) jeśli zapytanie ma tylko opcjonalne klauzule, nadal pozostaje opcjonalne. setMinimumNumberShouldMatch kontroluje to, ale domyślnie traktuje zapytanie tak, jak użyto 0. – physicsmichael