2013-01-24 23 views
2

我想查詢的Solr與下列要求: _我想獲得它沒有特定的領域Lucene的OR查詢不工作

-exclusivity所有文件:[*到*]

  • 我想獲得有該領域的所有文件,並得到了具體的值

排他性:(無)

所以當我試圖查詢的Solr 4:

FQ =( - 排他性:[*到*])或排他性:(無)

我如果該字段存在於文檔中,並且值爲無,但結果不包含第一個查詢的結果,則只會得到結果!

我不明白爲什麼它不工作

回答

0

我已經爲此問題創建了答案。我做了壞的假設如何「 - 」在solr.I作品雖然這

-exclusivity:[*到*]

沒有排他性字段添加到所有數據集,但它不是案件。 ' - '只能排除數據集中的東西。順便說一句femtoRgon你是對的,但我用它作爲fq(過濾器查詢)而不是我已經忘記提及的主查詢。

因此,解決辦法是像

-exclusivity:([*到*]和 - (無))

和完整的查詢看起來像

/Q = *? :* & fq = -exclusivity:([* TO *] AND - (None))

這意味着我會得到一切都沒有字段排他性或有這個領域,它是填充瓦特第i個值無。

1

來解釋你的結果,查詢(-exclusivity:[* TO *])總是會得到任何結果,因爲你沒有指定任何結果檢索。默認情況下,Lucene不會檢索任何結果,除非您告訴它獲取它們。 exclusivity:(None)不是對整個結果集的限制,它是用於查找要檢索的文檔的關鍵。這與數據庫不同,默認情況下,該數據庫會返回表中的所有記錄,並允許您限制該集。

(-exclusivity:[* TO *])只指定什麼不能得到,但沒有告訴它獲取任何東西。

Solr具有處理純負面查詢的邏輯(我相信,通過以下幾乎相同的方式,通過隱式地檢索所有文檔),但是從我收集的內容來看,只能作爲頂層查詢,並且它不處理查詢如term1 OR -term2documented here

相信使用Solr,你應該能夠使用查詢*:*來獲取所有文檔(儘管這不會在原始的Lucene可用),所以你可以使用查詢:

(*:* -exclusivity:[* TO *]) exclusivity:(None) 

這意味着,獲得(所有文檔,除了具有排他性價值的文檔)或文檔,其中排他性=「無」

+0

謝謝你的回答。 –

+0

原始Lucene中'*:*'的解決方法 - 使用每個文檔中的字段。例如,如果'alltext'在每個文檔中,則查詢'alltext:*'將檢索所有文檔 –

+0

@MarkLeightonFisher更好的方法是使用[MatchAllDocsQuery](http:// lucene.apache。 org/core/4_0_0/core/org/apache/lucene/search/MatchAllDocsQuery.html),它可以根據需要在'BooleanQuery'中輕鬆地與'Queryperser.parse'的結果合併。這樣,您不需要爲索引添加虛擬字段,或者允許引用通配符,或者可能對實際數據的性質做出不安全的假設,但我不願意這麼做。 – femtoRgon