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我做错了什么? 谢谢!

对我来说,一个简单的解决方案似乎是搜索两次,为什么你不搜索两次?如果您在第一次搜索时没有获得任何结果,请再次搜索,否则请在此处停止。&不要再次搜索。

四种情况,

  1. 只有version:ACTIVE文件有
  2. 只有version:CURRENT文件有
  3. 两个version:ACTIVE & version:CURRENT文件都存在
  4. 与任何version:ACTIVE OR version:CURRENT没有文档有

因此,如果仅针对version:ACTIVE运行查询,则会覆盖您的场景#1 &#3 &场景#4已部分覆盖。然后如果您得到任何结果,请在此处停止,但如果您没有得到任何结果,请尝试仅再次搜索version:CURRENT

希望它有帮助!