2011-08-03 115 views
0

我理解模糊搜索的一切都很好,但在我的應用程序中,它們非常緩慢且詞條很多(〜500ms)。我遇到了一個解決方案,以減緩模糊搜索,因爲它建議不要使用模糊搜索,而是使用levenstein算法對術語進行索引,以便正則關鍵字搜索會產生模糊結果。Hibernate搜索中的模糊索引

有沒有什麼辦法做到這一點與Hibernate搜索,最好使用註釋?

回答

0

我不太清楚你想在這裏做什麼。你是否希望在索引時間內將具有給定Levenstein距離的詞插入索引中?與同義詞搜索在何處插入同義詞標記到索引中類似?如果是這樣,您可以在令牌過濾器(和過濾器工廠)上編寫代碼,然後使用框架構建您的自定義分析器。看看源代碼,看看它是如何完成的。請注意,我看到了這種方法的幾個問題。索引變得非常昂貴,索引尺寸將變得非常大。當然,我對你的用例瞭解得不多。

0

我會嘗試以下選項,依次是:

  1. 你只是試圖糾正用戶查詢中的拼寫錯誤?也許你應該爲此使用拼寫檢查器/自動引導,而不是使用較慢的模糊查詢和難以調整的相關性。
  2. 這不是一個真正的全文搜索,而是某種類型的「匹配」程序?在這種情況下,替代方案可以是將字符n-gram索引,例如,使用lucene的ngram TokenFilters,以便您在該字段上執行布爾查詢,而不是使用慢模糊查詢。這實際上是lucene的拼寫檢查程序如何在幕後執行的!
  3. 如果上述不適用,並且您確實需要模糊搜索,並且沒有其他選擇,則可以嘗試每晚使用lucene主幹構建。這使用了完全不同的算法,以便這些查詢速度更快[1]。但是,我認爲您不能輕鬆將未發佈的lucene主幹與hibernate進行整合。

    [1]:http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html關於模糊改進的博客。

+0

謝謝!你是對的,這不是一個全文搜索,而是根據某些字段數據在數據庫中搜索記錄。模糊搜索需要應用於這些字段中的幾個以及對於長達30秒左右的搜索的長搜索查詢。我選擇暫時使用模糊搜索。 – Mouscellaneous