0

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

那么这是正确的吗?

+(A OR B) +C
4

1 回答 1

2

很简单:(A OR B或只是A B

这将生成两个BooleanClauses Occur.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)不像您在原始问题中所期望的那样工作。

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

  • BooleanQuery
    • 必须:BooleanQuery
      • 应该:TermQuery: A
      • 应该:TermQuery: B
    • 必须:TermQuery: C
于 2014-11-27T14:42:07.463 回答