2010-09-15 31 views
25

Lucene的查詢VS過濾查詢之間的區別?Lucene的:是什麼和過濾

他們兩人確實喜歡通過長期價值termquery過濾器類似的事情,過濾器我想是有類似的目的。

你什麼時候會使用過濾器和查詢時?

剛上Lucene的從今天開始,從而試圖清除概念

回答

8

一個Query可以傳遞到Searcher來查找文檔。 A Filter不能;它只能修改Query產生的結果。

實施新Query類型是相當複雜的,需要Lucene的內部像WeightScorerSimilarity的關係的理解。 A Filter的實施可能相當簡單,並且根本不與IndexReader交互。

+0

雖然你所說的原則是正確的,但篩選器也可以傳遞到搜索器,但它們分開工作以便查詢 – Khash 2010-10-23 21:54:59

+0

@Khash我不確定你的意思。如果你說'Filter'實例可以傳遞給'Searcher'(或者現在只是'IndexSearcher'),那麼這是事實,但只能與Query或其他搜索條件一起使用。他們不自行工作。 – erickson 2014-09-04 04:27:28

17

過濾器不影響未過濾的文件的得分計算。

例如設想以下文檔:

1. 
loc: "uk", "london" 
text: "i live in london, "london is the best" 

2. 
loc: "london avenue", "london street", "london" 
text: "I like the shop in london st." 

現在讓我們說你做下面的查詢:

q=+loc:"london" +text:"london" 

在此查詢文檔2的得分比DOC 1高(因爲loc是在文檔計分中得分)

使用過濾器:

q=+text:"london" f=+loc:"london" 
在此查詢

文檔1的得分比DOC 2

藉口Solr的樣式格式,但整體概念的高清晰。

使用過濾器的其他原因是高速緩存的目的,過濾器通過查詢分別緩存,所以如果你有一個靜態部分動態查詢這將是有意義的靜態部分進行過濾。通過這種方式,索引遍歷僅限於過濾文檔的子集。

0

在您關閉數據庫,過濾器的選擇消失。但是當你關閉查詢並再次打開它時,它仍然會在那裏。

您還可以使用表單創建查詢。但是你不能在表單中使用過濾器。

+3

你在說什麼?爲什麼不能使用這種形式的過濾器? – Dennis 2012-06-11 17:35:00