2010-10-29 67 views
1

這是我的理解是,基於查詢找到文檔,然後該結果然後過濾器篩選。Lucene.NET:查詢或過濾?

查詢是唯一會影響文檔的分數/相關性的。

如果我查詢與相關性相關的結果並篩選不相關的項目,是否會有任何性能(緩存)改進?

這是我的情況。我有很多產品,而且網站通常會按類別或製造商搜索產品。我在考慮使用查詢,因爲這會將產品縮小到可緩存的較小子集。然後我可以按產品規格過濾我的結果。我應該使用過濾器來規範嗎?這樣我們可以基於已經緩存的(由lucene)產品子集(類別或製造商)進行篩選。

回答

0

filterquery之間的差異主要是那個filter是確切的。如果您在brand=...上過濾,則只會獲得該確切品牌。如果您查詢它,您將獲得品牌以及可能與您的查詢相匹配的其他結果。

所以問題是,你想要一個確切的過濾器,還是隻是爲了相關性?

+0

BoolClause.Occur.MUST不會確切嗎?你確切的意思是什麼?你的意思是什麼產品的相關性得分爲1或0? – 2010-10-29 05:23:07

+0

@Paul Knopf:是的,在這種情況下,只有排名不同。 – Wolph 2010-10-29 13:57:22

0

過濾提供了一種機制,可進一步限制查詢的結果,並在多次運行同一查詢時提供可能的性能增益。 我們主要使用過濾器來實現安全性 - 這可以提高性能,因爲查詢的結果會被緩存。

1

使用過濾器也不會影響返回的分數,而查詢中的附加詞會影響返回的分數。你應該使用過濾器,例如,如果用戶從作爲面可用類別列表中選取某一類:

  • 類別:ELECTRICALS
  • 查詢方式:單反相機

合力分數(相關性)是基於查詢條件以外的其他查詢條件