我需要不在我的lucene索引上查詢。 Lucene的目前允許不僅當我們在查詢兩個或多個方面:不在lucene中查詢
所以我可以這樣做:
country:canada not sweden
,但我不能運行一個查詢,如:
country:not sweden
請您告訴我是否有針對此問題的一些有效解決方案
謝謝
我需要不在我的lucene索引上查詢。 Lucene的目前允許不僅當我們在查詢兩個或多個方面:不在lucene中查詢
所以我可以這樣做:
country:canada not sweden
,但我不能運行一個查詢,如:
country:not sweden
請您告訴我是否有針對此問題的一些有效解決方案
謝謝
簡短的回答是,這是不可能使用標準的Lucene。
Lucene不允許將NOT
查詢作爲一個單詞出於同樣的原因,它不允許前綴查詢 - 要執行,引擎將不得不查看每個文檔以確定文檔是否不是命中。它必須瀏覽每個文檔,因爲它不能使用搜索項作爲在倒排索引(用於存儲索引文檔)中查找文檔的關鍵。
要接你的案子爲例:
要搜索
not sweden
,最簡單的(也可能是最有效的)方法是尋找sweden
,然後「反轉」的結果集返回的所有文件不在該結果集中。這樣做需要找到索引中所有必需的(即不在結果集中)文檔,但是沒有一個鍵可以查找它們。這可以通過遍歷索引中的文檔來完成 - 它不是優化的任務,因此速度會受到影響。
如果你真的需要這個功能,你可以建立索引時,維護自己的項目列表,從而使not sweden
搜索成爲使用Lucene一個sweden
搜索,然後用你的項目組結果的反轉。
請檢查相似的question的答案。解決方案是使用MatchAllDocsQuery。
非常晚的答覆,但它可能是有用的人後來其他:如果我沒有記錯的話這應該做
*:* AND NOT country:sweden
邏輯「與」所有文件和文件與一個國家不同於「瑞典」。
好的,我明白你在做什麼。
由於Lucene中沒有一元布爾運算符,因此可以將它用作查詢優化。儘管有上述問題的答案,我相信這是一個更好的和最前沿的做法(注意通配符前的空格):
&query= *&qf=-country:Canada
+1就是這樣 – 2010-08-31 12:22:45