如何在Lucene.NET中执行"OR"操作.基本上我所拥有的是一个ID数组,我想返回特定字段包含任何值的任何记录.我之前只使用一个值来执行此操作,但现在我想转换以下代码,以便MetaDataID是可能值的数组而不是单个值.
if (MetaDataID.Length > 0)
completeQuery.Add(new QueryParser("MetaData", new StandardAnalyzer()).Parse(MetaDataID), BooleanClause.Occur.MUST);
Run Code Online (Sandbox Code Playgroud)
Zar*_*eth 11
将Lucene查询组合在一起时,您希望任何包含多个可能值中的任何一个的索引记录以及必须满足的其他条件,请创建多个布尔查询对象.
对于第一组"OR"条件:
BooleanQuery booleanQueryInner = new BooleanQuery();
Query query1 = new TermQuery(new Term("id", "<id 1>"));
Query query2 = new TermQuery(new Term("id", "<id 2>"));
Query query3 = new TermQuery(new Term("id", "<id 3>"));
Query query4 = new TermQuery(new Term("id", "<id 4>"));
booleanQueryInner.add(query1, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query2, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query3, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query4, BooleanClause.Occur.SHOULD);
Run Code Online (Sandbox Code Playgroud)
现在结合查询中的其他条件
BooleanQuery booleanQueryOuter = new BooleanQuery();
booleanQueryOuter.add(booleanQueryInner, BooleanClause.Occur.MUST);
booleanQueryOuter.add(boolenaQueryOtherConditions, BooleanClause.Occur.MUST);
Run Code Online (Sandbox Code Playgroud)
现在,只有当索引记录满足内部"OR"组中的一个条件并且满足"其他条件"查询中的条件时,才会返回索引记录.
你需要使用BooleanClause.Occur.SHOULD而不是BooleanClause.Occur.MUST
例如:
BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("id", "<id 1>"));
Query query2 = new TermQuery(new Term("id", "<id 2>"));
booleanQuery.add(query1, BooleanClause.Occur.SHOULD);
booleanQuery.add(query2, BooleanClause.Occur.SHOULD);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3468 次 |
| 最近记录: |