您的查询可以重写为:
"... 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);