2010-10-12 73 views
1

我需要使用包含大約800萬行的索引創建FuzzyQuery。這種查詢很慢,每場比賽需要大約20秒。事實是,在進行模糊搜索之前,我可以使用另一個字段將搜索結果縮小到約5000個點擊量。爲了達到這個目的,我應該能夠首先通過「較窄」字段進行搜索,然後在這些結果中使用模糊搜索。Lucene:使用FuzzyQuery在搜索範圍內搜索

按照lucene FAQ,我要做的唯一事情是BooleanQuery,這裏的「窄」應符合規定(BooleanClause.Occur.MUST在Lucene中3)。

現在我已經嘗試了兩種不同的方法:

一個)使用查詢解析器,用等的輸入: narrower:+narrowing_text fuzzy:fuzzy_text~0.9

B)構建BooleanQueryTermQuery和一個FuzzyQuery

都沒有工作,我得到的時間大約是那些不使用較窄的時間。

此外,只是爲了檢查如果狹窄工作的時間應該會好得多,我只索引5000個匹配更窄的項目,並且搜索速度很快。

如果有人奇怪,我使用pylucene 3.0.2。

+0

模糊查詢得到多少結果?我問,因爲我想知道是實際搜索還是重寫速度很慢。 – Xodarap 2010-10-13 19:55:45

回答

2

Doppleganger,你可以使用Filter,特別是QueryWrapperFilter。 請按照Lucene in Action中的示例進行操作。您可能需要對Python進行一些修改,否則它應該很簡單:

  1. 創建將查詢縮小到5000個查詢的查詢。
  2. 用它來構建QueryWrapperFilter。
  3. 在涉及模糊查詢的搜索中使用過濾器。
+0

我也想過這個解決方案,但是如果你檢查我在問題中給出的Lucene FAQ鏈接,它說使用QueryFilter不是推薦的解決方案,所以我試圖找出爲什麼「正確」解決方案不是不爲我工作。 – Doppelganger 2010-10-13 17:44:56

+0

聽起來像是你的「正確」解決方案的性能不好,所以我建議你嘗試一下這個...... – 2010-10-13 18:26:39