2012-04-12 4 views

Odpowiedz

29

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 minimumShouldMatchBooleanClause.Occur.SHOULD klauzule muszą być zgodne z dokumentem pojawiać się w wynikach.

+0

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

20

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.

0

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.

0

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