2014-09-04 62 views
0

我在如何让使用BooleanQuery和TermQuery等在lucene.net查询我希望它以同样的方式作为这条SQL语句的疑问:Lucene.net/C#/加筛选查询

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

任何人都可以帮助我。

,直到如今我只有

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

回答

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); 

如果你想做更复杂的查询,那么你可以添加一个布尔查询作为一个子句到另一个r布尔查询:

// 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); 
+0

你能帮我解决“子句”布尔查询吗?在此先感谢 – 2014-09-04 07:43:53

+0

@NicholasBuusRasmussen,看我编辑 – Norfolc 2014-09-04 07:49:01

+0

这是完美的 - 感谢您的帮助 – 2014-09-04 08:27:54