2017-08-11 63 views
0

文件我有索引這樣的兩個文件: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我做錯了什麼? 謝謝!

回答

0

對我來說,一個簡單的解決方案似乎是搜索兩次,爲什麼你不搜索兩次?如果您在第一次搜索時沒有獲得任何結果,請再次搜索,否則請在此處停止。&不要再次搜索。

四種情況,

  1. 只有version:ACTIVE文件有
  2. 只有version:CURRENT文件有
  3. 兩個version:ACTIVE & version:CURRENT文件都存在
  4. 與任何version:ACTIVE OR version:CURRENT沒有文檔有

因此,如果僅針對version:ACTIVE運行查詢,則會覆蓋您的場景#1 &#3 &場景#4已部分覆蓋。然後如果您得到任何結果,請在此處停止,但如果您沒有得到任何結果,請嘗試僅再次搜索version:CURRENT

希望它有幫助!