Hibernate搜索中的模糊索引

时间:2011-08-03 18:32:55

标签: hibernate indexing lucene hibernate-search fuzzy-search

我完全理解模糊搜索,但在我的应用程序中,它们很慢,有很多术语(~500ms)。我遇到了一个缓慢模糊搜索的解决方案,其中建议不要进行模糊搜索,而是使用levenstein算法对术语进行索引,这样常规关键字搜索就会产生模糊结果。

有没有办法用Hibernate Search做这个,最好是使用注释?

2 个答案:

答案 0 :(得分:0)

我不太清楚你想在这做什么。您是否希望在索引编制期间将具有给定Levenstein距离的单词插入索引?与同义词搜索类似,您可以将同义词标记插入到索引中吗?如果是这样,您可以编写on token过滤器(和过滤器工厂),然后使用 @AnalyzerDef 框架构建自定义分析器。查看源代码以了解如何完成此操作。 请注意,我看到这种方法有几个问题。索引变得昂贵,索引大小将变得非常大。当然,我对你的用例了解不多。

答案 1 :(得分:0)

我会按顺序尝试以下选项:

  1. 您是否只是想在用户查询中更正拼写错误?也许你应该为此预先使用拼写检查/自动提示,而不是使用具有难以调整的相关性的较慢的模糊查询。
  2. 这不是真正的全文搜索,而是某种类型的“匹配”程序吗?在这种情况下,替代方案可以是改为索引字符n-gram,例如,使用lucene的ngram TokenFilters,这样你就可以在字段上进行布尔查询而不是慢速模糊查询。这实际上就是lucene的拼写检查器在幕后工作的方式!
  3. 如果上述情况不适用,并且您确实需要进行模糊搜索,并且没有其他选择,您可以尝试使用夜间构建的lucene's trunk。这使用了完全不同的算法,因此这些查询要快得多[1]。但是,我认为你不能轻易地将未发布的lucene trunk与hibernate集成在一起。

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