2012-04-12 25 views

回答

29

BooleanClause.Occur.SHOULD表示該條款是可選的,而BooleanClause.Occur.Must表示該條款是強制性的。

但是,如果布爾查詢只包含可選子句,則至少有一個子句必須匹配以使文檔出現在結果中。

在過去什麼證件匹配BooleanQuery更好的控制,也有minimumShouldMatch參數,它可以讓你告訴Lucene的,對於一個文檔出現在結果中至少minimumShouldMatchBooleanClause.Occur.SHOULD條款必須匹配。

+0

根據[這lucene的文檔】(http://lucene.apache.org/core/3_5_0/api/core/org/apache/lucene /search/BooleanQuery.html#setMinimumNumberShouldMatch%28int%29)如果一個查詢只有可選子句,它仍然是可選的。 setMinimumNumberShouldMatch控制它,但默認情況下它將查詢視爲0使用。 – physicsmichael 2016-03-25 23:38:12

20

我會嘗試用一個例子來解釋:

讓我們假設有兩個條款:條款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標誌。

    在這種情況下,一個文檔將是一個命中,只有當它將滿足「兩個」條款。如果它甚至不能滿足該條款中的一條,那麼它將不會受到影響。

0

SHOULD子句是lucene中最重要的功能,當你最關心的問題是排名!

當您使用SHOULD子句時,Lucene通過SHOULD子句點的總和對檢索到的文檔進行排名。因此,您可以將一些查詢與SHOULD子句一起加入不同的提升(根據它們的重要性)。這是Solr中ExtendedDismaxQuery的概念。

0

BooleanClause.Occur.Must代表強制性條款。該條款應符合要返回的結果。基本上AND

BooleanClause.Occur.SHOULD代表可選的條款,並會表現得像一個OR