lucene中BooleanClause.Occur.Must和BooleanClause.Occur.SHOULD之间的区别

Jag*_*esh 30 lucene search boolean

任何人都可以通过一个例子来解释BooleanQuery中lucene中的BooleanClause.Occur.Must和BooleanClause.Occur.SHOULD之间的区别吗?

jpo*_*ntz 33

BooleanClause.Occur.SHOULD表示该条款是可选的,但BooleanClause.Occur.Must意味着该条款是强制性的.

但是,如果布尔查询只有可选子句,则必须至少匹配一个子句才能使文档出现在结果中.

为了更好地控制哪些文档与BooleanQuery匹配,还有一个minimumShouldMatch参数,它允许您告诉Lucene至少的minimumShouldMatch BooleanClause.Occur.SHOULD子句必须匹配才能在结果中显示文档.

  • 根据[此lucene文档](http://lucene.apache.org/core/3_5_0/api/core/org/apache/lucene/search/BooleanQuery.html#setMinimumNumberShouldMatch%28int%29),如果查询只有可选项条款它仍然是可选的.setMinimumNumberShouldMatch控件,但默认情况下它会将查询视为使用0. (2认同)

Log*_*gan 25

我将尝试使用一个例子来解释:

让我们假设有两个子句:条款A和条款B.现在,BooleanClause.Occur的效果如下:

  • 在第一种情况下,子句A和B都设置了BooleanClause.Occur.Should标志.这意味着即使其中一个条款得到满足(A或B),那么该文件也会受到影响.

  • 在第二种情况下,子句A具有BooleanClause.Occur.Must标志集,而子句B具有BooleanClause.Occur.Should标志集.

    在这种情况下,当文档"将"满足条款A时,文档将被命中.该文档是否满足条款B将不会影响它.

    但如果文件不满足条款A,那么无论它是否满足条款B,它都不会受到影响.

  • 在第三种情况下,子句A和子句B都设置了BooleanClause.Occur.Must标志.

    在这种情况下,只有当文档满足"两个"条款时,文档才会成为命中.如果它甚至不能满足其中一个条款,那么它就不会受到影响.


and*_*k.a 5

BooleanClause.Occur.Must代表强制条款。必须满足子句才能返回结果。基本上AND

BooleanClause.Occur.SHOULD代表可选子句,其行为类似于OR