Может ли кто-нибудь объяснить разницу между BooleanClause.Occur.Must и BooleanClause.Occur.SHOULD в lucene в BooleanQuery с примером?
Разница между BooleanClause.Occur.Must и BooleanClause.Occur.SHOULD в lucene
Ответ 1
BooleanClause.Occur.SHOULD
означает, что предложение является необязательным, тогда как BooleanClause.Occur.Must
означает, что предложение является обязательным.
Однако, если в булевом запросе есть только необязательные предложения, по крайней мере одно предложение должно соответствовать документу, который будет отображаться в результатах.
Чтобы лучше контролировать, какие документы соответствуют BooleanQuery, есть параметр minimumShouldMatch, который позволяет вам рассказать Lucene, что не менее minimumShouldMatch
BooleanClause.Occur.SHOULD
должны совпадать, чтобы документ появился в результатах.
Ответ 2
Я попытаюсь объяснить, используя пример:
Предположим, что существуют два предложения: Раздел A и Раздел B. Теперь эффект BooleanClause.Occur будет следующим:
-
В первом случае оба предложения A и B имеют BooleanClause.Occur.Should флаг установлен. Это будет означать, что даже если одно из условий выполнено (A или B), тогда документ будет хитом.
-
Во втором случае предложение A имеет BooleanClause.Occur.Must флаг и предложение B имеет BooleanClause.Occur.Should флаг установлен.
В этом случае документ будет хитом, когда он "будет" удовлетворять предложению А. Если этот документ удовлетворяет условию B или нет, это не повлияет на то, что он стал хитом.
Но если документ не удовлетворяет условию A, то независимо от того, удовлетворяет ли он условию B или нет, это не будет ударом.
-
В третьем случае оба предложения A и B имеют флаг BooleanClause.Occur.Must.
В этом случае документ будет хитом, только когда он будет удовлетворять "обоим" предложениям. Если это не удовлетворит даже одно из предложения, то это не будет ударом.
Ответ 3
СЛЕДУЮЩАЯ статья - самая важная функция в lucene, когда ваша самая важная проблема - РЕЙТИНГ!
Когда вы используете предложение SHOULD, Lucene оценивает полученный документ путем суммирования пунктов предложения SHOULD. Таким образом, вы можете присоединиться к некоторому запросу вместе с предложением SHOULD с разными повышениями (в зависимости от их важности). Это концепция ExtendedDismaxQuery в Solr.
Ответ 4
BooleanClause.Occur.Must
означает обязательное предложение. Чтобы результат возвращался, необходимо выполнить условие. В основном AND
.
BooleanClause.Occur.SHOULD
обозначает необязательное предложение и будет вести себя как OR