Lucene QueryParser:必须包含其他MUST子句中的一个或另一个

时间:2014-11-27 14:36:51

标签: lucene query-parser

如何使用来自Apache Lucene的QueryParser来查询包含术语A或术语B(或两者,但至少包含其中一个)的查询。 编辑:此外,它包含其他必须条款,例如,它必须包含C,并且必须包含A或B.

这是正确的吗?

+(A OR B) +C

1 个答案:

答案 0 :(得分:2)

只是:A OR B(或只是A B

这将生成两个BooleanClauseOccur.SHOULD。在这种情况下,至少有一个子句必须匹配整个BooleanQuery才能匹配:

/** Use this operator for clauses that <i>should</i> appear in the 
 * matching documents. For a BooleanQuery with no <code>MUST</code> 
 * clauses one or more <code>SHOULD</code> clauses must match a document 
 * for the BooleanQuery to match.
 * @see BooleanQuery#setMinimumNumberShouldMatch
 */
SHOULD   { @Override public String toString() { return "";  } },

回答更新后的问题:

(A OR B) AND C应该做你想做的事。

我对+(A OR B) +C不太确定,因为它看起来应该有效,但你说+(A OR B)在你原来的问题中没有像你期望的那样工作。< / p>

为确保您可以查看QueryParser生成的内容。您需要这种查询结构:

  • BooleanQuery
    • 必须:BooleanQuery
      • 应该:TermQuery A
      • 应该:TermQuery B
    • 必须:TermQuery C