2011-10-06 31 views
8

解決這個問題的最後一個選擇是詢問StackOverflow。如何在Apache Solr查詢中取得空值?

我想創建一個Solr的查詢來獲取對其領域的一個或一個特定的值不具有價值的文件...

Theorically,這個查詢應該有工作。

下面是一些信息:

查詢:(姓名:John) - >結果次數:15383 //約翰

查詢:(名稱:{* TO *}) - - >結果數:61013 //有一個名字

查詢人: - (名稱:{* TO *}) - >結果數:216888 //沒有名稱

現在,當我使用OR運算符在同一個查詢中使用第一個和第三個查詢時,我期望得到(216888 + 15383)結果。但SOLR給出了15383個結果,簡單地忽略了第三個查詢的效果:

查詢: +((name:john)( - (name({{* * *))用過的。

這是一個Solr的錯誤,或者我在查詢中做錯了嗎?合併兩個查詢結果是一個額外的解決方案,但我不想執行額外的代碼實現,如果我可以用一個簡單的查詢來完成。

任何幫助,將不勝感激。

回答

16

(-name:[* TO *] AND *:*) OR name:john

+0

爲我工作! – Raj

+0

這正是我所需要的。謝謝。你能解釋在這個例子中'AND *:*'做了什麼?我發現如果我把這部分放出去,我的搜索不起作用,我只是不知道爲什麼。 –

+0

'*:*'表示所有行。 '*:* -name:*'表示沒有名稱值的所有行。 'name:john OR(*:* -name:*)'可以作爲'name ='john'或'name IS NULL'被轉換爲SQL – Semra

-1

嘗試下面的查詢 -

q=(name:john OR -(name:[* TO *])) 
+0

還是一樣。 15383結果。 – emregecer

+2

我在這個[link]找到了解決方案(http://stackoverflow.com/questions/1343794/searching-for-date-range-or-null-no-field-in-solr) – emregecer

+1

- ( - (name()約翰)+(姓名:{* TO *})) – emregecer

1

您也可以使用它像這樣。

&fq=name:john OR !name:['' TO *]