Hibernate搜索中的模糊索引

Hibernate搜索中的模糊索引,hibernate,indexing,lucene,hibernate-search,fuzzy-search,Hibernate,Indexing,Lucene,Hibernate Search,Fuzzy Search,我完全理解模糊搜索,但在我的应用程序中,它们非常慢,有很多词~500毫秒。我遇到了一个缓慢模糊搜索的解决方案,其中建议不要进行模糊搜索,而是使用levenstein算法对术语进行索引,这样常规的关键字搜索将产生模糊结果 有没有办法通过Hibernate搜索实现这一点,最好是使用注释?我不太确定您想在这里做什么。是否要在索引期间将具有给定Levenstein距离的单词插入索引?类似于将同义词标记插入索引的同义词搜索?如果是这样,您只需在令牌过滤器和过滤器工厂上编写代码,然后使用@AnalyzerD

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


有没有办法通过Hibernate搜索实现这一点,最好是使用注释?

我不太确定您想在这里做什么。是否要在索引期间将具有给定Levenstein距离的单词插入索引?类似于将同义词标记插入索引的同义词搜索?如果是这样,您只需在令牌过滤器和过滤器工厂上编写代码,然后使用@AnalyzerDef框架构建自定义分析器。查看源代码以了解这是如何实现的。
请注意,我发现这种方法有几个问题。索引变得昂贵,索引大小将变得非常大。当然,我对你的用例知之甚少

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

您只是想更正用户查询中的拼写错误吗?也许你应该提前使用拼写检查/自动建议,而不是使用速度较慢、关联性难以调整的模糊查询。 这真的不是全文搜索,而是某种类型的“匹配”过程吗?在这种情况下,另一种方法是为字符n-gram编制索引,例如使用lucene的ngram标记过滤器,这样您就可以对字段执行布尔查询,而不是缓慢的模糊查询。这就是lucene的拼写检查器在幕后的工作原理! 如果上述情况不适用,并且您确实决定需要模糊搜索,并且没有其他选择,您可以尝试使用lucene主干的夜间构建。这使用了完全不同的算法,因此这些查询速度更快[1]。但是,我认为您无法轻松地将未发布的lucene trunk与hibernate集成

[1] :关于模糊改进的博客


谢谢没错,这不是全文搜索,而是基于特定字段数据在数据库中搜索记录。模糊搜索需要应用于其中几个字段,对于长搜索查询,它需要30秒左右的搜索时间。我暂时选择不使用模糊搜索。