我完全理解模糊搜索,但在我的应用程序中,它们非常慢,有很多术语(约 500 毫秒)。我遇到了一个缓慢模糊搜索的解决方案,建议不要进行模糊搜索,而是使用 levenstein 算法对术语进行索引,这样常规关键字搜索就会产生模糊结果。
有没有办法用 Hibernate Search 做到这一点,最好使用注释?
我完全理解模糊搜索,但在我的应用程序中,它们非常慢,有很多术语(约 500 毫秒)。我遇到了一个缓慢模糊搜索的解决方案,建议不要进行模糊搜索,而是使用 levenstein 算法对术语进行索引,这样常规关键字搜索就会产生模糊结果。
有没有办法用 Hibernate Search 做到这一点,最好使用注释?
我不太确定你想在这里做什么。您是否希望在索引期间将具有给定 Levenstein 距离的单词插入索引中?类似于在索引中插入同义词标记的同义词搜索?如果是这样,您可以只编写您的令牌过滤器(和过滤器工厂),然后使用@AnalyzerDef框架来构建您的自定义分析器。查看源代码以了解这是如何完成的。请注意,我发现这种方法存在几个问题。索引变得昂贵并且索引大小将变得非常大。当然,我对您的用例了解不多。
我会按顺序尝试以下选项:
如果上述不适用,并且您确实决定需要模糊搜索,并且没有其他选择,您可以尝试使用夜间构建的 lucene 主干。这使用了一种完全不同的算法,因此这些查询要快得多 [1]。但是,我认为您无法轻松地将未发布的 lucene 主干与休眠集成。
[1]:http ://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html关于模糊改进的博客。