鑑於這一文本的文檔,在一個名爲內容字段建立索引:Lucene的查詢失敗混合MUST/MUST_NOT
The dish ran away with the spoon.
以下查詢失敗,該文件匹配:
+Content:dish +(-Content:xyz) <-- no results!
查詢應視爲必須包含「碟」,不得包含「xyz」。這是失敗的「不可」部分。
我知道+ - 組合看起來很滑稽,但它語法應該是正確的,特別是考慮到以下變化各項工作:
+Content:dish +(-Content:xyz +Content:spoon) <-- this works
+Content:dish -Content:xyz <-- this works
那麼,爲什麼不呢+(-Content:xyz)
工作?這是設計,還是一個錯誤,或者我只是想念一些東西?我使用的是Lucene.Net,但我認爲普通的Lucene的行爲是一樣的。
現在對我有意義。謝謝! – Keith
僅供參考MatchAllDocsQuery的字符串表示形式爲'*:*'。我上面的例子應該改爲以下它的工作:'+內容:菜+(+ *:* - 內容:xyz)' – Keith
@凱斯嗯,不,它**應該被改爲等效: '內容:菜 - 內涵:xyz',但是,是的,這將工作(緩慢)。無法回想一下對'*:*'的支持是什麼樣子的(不管它是在Solr中,哪些版本支持它,它是否被.Net impl支持)。 – femtoRgon