2011-08-03 74 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