如何使用来自 Apache Lucene 的 QueryParser 来生成包含术语 A 或术语 B(或两者,但至少其中一个)的查询。编辑:此外,它还包含其他 MUST 子句,例如,它必须包含 C 并且必须包含 A 或 B。
那么这是正确的吗?
+(A OR B) +C
如何使用来自 Apache Lucene 的 QueryParser 来生成包含术语 A 或术语 B(或两者,但至少其中一个)的查询。编辑:此外,它还包含其他 MUST 子句,例如,它必须包含 C 并且必须包含 A 或 B。
那么这是正确的吗?
+(A OR B) +C
很简单:(A OR B
或只是A B
)
这将生成两个BooleanClause
s 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
: ATermQuery
: BTermQuery
: C