2009-08-27 57 views
29

我想在Solr中的文本字段上執行搜索。我想返回一個範圍內或沒有價值的所有比賽。這兩個搜索詞是獨立的:在Solr中搜索日期範圍或空/無字段

myfield:[start TO finish] 
-myfield:[* TO *] 

第一個返回範圍內的所有匹配。第二個返回所有對「myfield」字段沒有值的匹配。 問題在於將這兩者結合在一起。

這沒有返回比賽:

myfield:[start TO finish] OR -myfield:[* TO *] 

這將返回起點和終點之間的匹配,而不是空條目:

myfield:[start TO finish] OR (-myfield:[* TO *]) 
+0

嘗試[this](http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query/)。 – 2009-08-28 01:45:13

+0

@samkass:同意,Solr應該檢測到這一點,並在內部將表達式重寫爲它可以處理的內容。 – 2013-09-06 18:55:43

+0

有沒有人將此文件作爲Solr JIRA中的錯誤進行存檔?我沒有看到任何理由爲什麼正邏輯版本不應該工作。 – samkass 2013-09-06 17:53:10

回答

2

我與毛裏西奧·雅伯的解決方案達成一致。

如果能幫忙,我改變了我的初始查詢:

DocSource:"P" OR (DocSource:"E" AND (MyDate:[NOW TO *] OR -MyDate:[* TO *])) 

DocSource:"P" OR (DocSource:"E" AND -(-MyDate:[* TO NOW] AND MyDate:[* TO *])) 

如預期中的Solr 4.1的第一個查詢沒有運行。

4

Mauricio Scheffer的解決方案爲我工作,直到我將它包含到完整查詢中。查詢本身最多可以包含三個帶範圍的字段,並且Solr中間的某個地方無法處理它。 我設法用一個查詢來解決這個問題:

(myfield:[start TO finish] OR (*:* NOT myfield:[* TO *])) 

它woked即使在我的複雜查詢,所以也許這將幫助別人。