我有一个具有 _IsPrivate 字段的文档的 lucene 索引。我需要查询索引以检索 _IsPrivate == false 或 _IsPrivate == true 和 _Owner == me 的所有文档。我一直在尝试以下 lucene 查询,但没有得到预期的结果......
_IsPrivate:false OR (_IsPrivate:true AND _Owner:me)
结果是我只获得了我拥有的文件(公共和私人)。
有什么想法可以重写我的查询吗?
我有一个具有 _IsPrivate 字段的文档的 lucene 索引。我需要查询索引以检索 _IsPrivate == false 或 _IsPrivate == true 和 _Owner == me 的所有文档。我一直在尝试以下 lucene 查询,但没有得到预期的结果......
_IsPrivate:false OR (_IsPrivate:true AND _Owner:me)
结果是我只获得了我拥有的文件(公共和私人)。
有什么想法可以重写我的查询吗?
我会使用“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);
这可能有点麻烦,但我真的很喜欢以这种方式组织我的查询。
希望能帮助到你。