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
- 1. W Lucene jaka jest różnica między ANALIZOWANYM a ANALIZOWANYM_N_M_NORMEM?
- 2. Różnica między obiektem a *?
- 3. Różnica między jquery a $
- 4. jaka jest różnica między grupowaniem a aspektem w Lucinie 3.5
- 5. różnica między katalogiem FSD a katalogiem MMap?
- 6. Jak połączyć dwa zapytania Lucene za pomocą OR?
- 7. Porównanie wydajności między Zend Lucene i Javą Lucene
- 8. Różnica między String [] a i String ... a
- 9. Różnica między DataSource a DataSet
- 10. Różnica między mapą a dyktowaniem
- 11. Różnica między systemem a shell_exec
- 12. Różnica między% 5B% a% 5B0%?
- 13. Różnica między wysokością a tłumaczeniemZ
- 14. Różnica między Redis a kafka
- 15. Różnica między content_main.xml a activity_main.xml?
- 16. Różnica między File.Copy a File.Move
- 17. różnica między __u8 a uint8_t
- 18. Różnica między CCNode a CCLayer?
- 19. Różnica między IPFS a Filecoin?
- 20. Różnica między hash_map a unordered_map?
- 21. Różnica między prędkością a AppFabric
- 22. Różnica między kodowaniem a sortowaniem?
- 23. Różnica między Invoke a DynamicInvoke
- 24. Różnica między WhitespaceTokenizerFactory a StandardTokenizerFactory
- 25. Różnica między DataContractSerializer a XmlSerializer
- 26. Różnica między transakcją a transakcjąScope
- 27. Różnica między dtrtrs a dtrsm
- 28. Różnica między bytearray a listą
- 29. Różnica między nowym a przesłonięciem?
- 30. Różnica między OpenCV a OpenCL
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