隨着Lucene 4的Levenshtein實現自稱比以前快了100倍(http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html),我想對查詢中的所有詞語進行模糊匹配。這個想法是,搜索'gren軟管'應該能夠找到'綠屋'文檔(我並不在乎這裏的短語,這些引用只是爲了使其更具可讀性)。Solr中每個查詢詞的模糊匹配
我使用Lucene 4 + 4 Solr的,因爲我做了一些預處理和後處理周圍有Solr的小包裝的servlet,該servlet使用SolrJ最終訪問Solr的
我目前在實現這一目標的正確途徑上有點失落。我的基本方法是將搜索查詢分解爲術語並在每個術語中附加代字符/模糊運算符。因此'gren軟管'會變成'gren〜hose〜'。現在的問題是如何正確地做到這一點。我可以看到幾種方法:
- 蠻力:假設條件由空格分隔,所以只需分析查詢和每個空格之前追加一個波浪線(即每學期後。)
- 兩個步驟:發送打開查詢調試的Solr查詢。這會給我一個由Solr解析的查詢術語列表。然後,我可以從調試輸出中提取術語,附加波形符號運算符,並使用附加的波形符運算符重新運行查詢。
- 內部:掛鉤到搜索請求處理程序中,並在查詢被解析爲術語後附加波形符號運算符
方法1很臭,因爲它會完全繞過Solr的查詢解析,所以我寧願不這樣做。如果解析查詢兩次的代價不太高,方法2聽起來非常可行。方法3聽起來恰到好處,但我還沒有弄清楚我必須在哪裏加入處理鏈。
也許有一種完全不同的方式來實現我想要做的,或者這可能只是我的一個愚蠢的想法。無論如何,我會非常欣賞一些指針,也許別人已經做了這樣的事情。謝謝!