Lucene的子查询返回基于条件
问题描述:
文件我有索引这样的两个文件:Lucene的子查询返回基于条件
VERSIONED_DOC
version=CURRENT
status=0
author=123
VERSIONED_DOC
version=ACTIVE
status=0
author=123
两个文件都代表相同的对象在我的系统,以不同的版本。
当使用lucene进行搜索时,我总是需要获取ACTIVE文档,但是如果索引中不存在ACTIVE文档,我需要获取CURRENT。如果两个文件都存在,则只有一个文件必须来(ACTIVE)。
这是我的查询:
(version:ACTIVE AND status:0 AND author:123)
OR
(
(version:CURRENT AND status:0 AND author:123) AND NOT (version:ACTIVE AND
status:0 AND author:123)
)
的问题是,它总是返回两个文件时,我有主动和现行文件。子查询的第二部分(AND NOT ...)无法检测到我拥有ACTIVE文档。
AM我做错了什么? 谢谢!
答
对我来说,一个简单的解决方案似乎是搜索两次,为什么你不搜索两次?如果您在第一次搜索时没有获得任何结果,请再次搜索,否则请在此处停止。&不要再次搜索。
四种情况,
- 只有
version:ACTIVE
文件有 - 只有
version:CURRENT
文件有 - 两个
version:ACTIVE
&version:CURRENT
文件都存在 - 与任何
version:ACTIVE
ORversion:CURRENT
没有文档有
因此,如果仅针对version:ACTIVE
运行查询,则会覆盖您的场景#1 &#3 &场景#4已部分覆盖。然后如果您得到任何结果,请在此处停止,但如果您没有得到任何结果,请尝试仅再次搜索version:CURRENT
希望它有帮助!