Lucene.net / c#/添加过滤查询

时间:2014-09-04 07:15:37

标签: c# asp.net .net asp.net-mvc lucene.net

我怀疑如何使用BooleanQuery和TermQuery等在lucene.net中进行查询。我希望它的行为与此sql语句相同:

"... WHERE ((isprivate = false) OR (isprivate = true and userid = 1))"

任何人都可以帮助我。

直到现在我只有

BooleanQuery booleanQuery = new BooleanQuery();
TermQuery isPrivateQuery = new TermQuery(new Term("isprivate", "true"));

1 个答案:

答案 0 :(得分:0)

您的查询可以重写为:

"... WHERE (isprivate = false) OR (userid = 1)"

所以你可以拥有下一个代码(考虑到你的值存储为字符串):

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(new TermQuery(new Term("isprivate", "true")), BooleanClause.Occur.SHOULD);
booleanQuery.Add(new TermQuery(new Term("userid", "1")), BooleanClause.Occur.SHOULD);

如果要进行更复杂的查询,则可以将一个BooleanQuery作为子句添加到另一个BooleanQuery中:

// Creating "and" clause
BooleanQuery booleanQueryInner = new BooleanQuery();
booleanQueryInner.Add(new TermQuery(new Term("isprivate", "false")), BooleanClause.Occur.MUST);
booleanQueryInner.Add(new TermQuery(new Term("userid", "1")), BooleanClause.Occur.MUST);

// Creating "or" clause
BooleanQuery booleanQueryMain = new BooleanQuery();
booleanQueryMain.Add(new TermQuery(new Term("isprivate", "true")), BooleanClause.Occur.SHOULD);
booleanQueryMain.Add(booleanQueryInner, BooleanClause.Occur.SHOULD);