1

我有一个具有 _IsPrivate 字段的文档的 lucene 索引。我需要查询索引以检索 _IsPrivate == false 或 _IsPrivate == true 和 _Owner == me 的所有文档。我一直在尝试以下 lucene 查询,但没有得到预期的结果......

_IsPrivate:false OR (_IsPrivate:true  AND _Owner:me)

结果是我只获得了我拥有的文件(公共和私人)。

有什么想法可以重写我的查询吗?

4

1 回答 1

3

我会使用“BooleanQuery”来执行这种操作。您进行 2 个查询,每个查询语句对应一个完整的搜索语句,然后将它们与“SHOULD”运算符相加。

var bq = new BooleanQuery();
var bq1 = new BooleanQuery();
bg1.add(new Term("_IsPrivate", "false"), BooleanClause.Occur.MUST);
var bq2 = new BooleanQuery();
bg2.add(new Term("_IsPrivate", "true"), BooleanClause.Occur.MUST);
bg2.add(new Term("_Owner", "me"), BooleanClause.Occur.MUST);
bq.add(bq1, BooleanClause.Occur.SHOULD);
bq.add(bq2, BooleanClause.Occur.SHOULD);

这可能有点麻烦,但我真的很喜欢以这种方式组织我的查询。

希望能帮助到你。

于 2012-05-09T18:22:03.097 回答