0

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

有没有办法用 Hibernate Search 做到这一点,最好使用注释?

4

2 回答 2

0

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

于 2011-08-04T08:01:20.330 回答
0

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

  1. 您只是想纠正用户查询中的拼写错误吗?也许您应该为此预先使用拼写检查器/自动建议,而不是使用较慢且难以调整相关性的模糊查询。
  2. 这不是真正的全文搜索,而是某种类型的“匹配”过程吗?在这种情况下,另一种方法可能是索引字符 n-gram,例如使用 lucene 的 ngram TokenFilters,以便您在字段上执行布尔查询而不是缓慢的模糊查询。这实际上是 lucene 的拼写检查器在幕后工作的方式!
  3. 如果上述不适用,并且您确实决定需要模糊搜索,并且没有其他选择,您可以尝试使用夜间构建的 lucene 主干。这使用了一种完全不同的算法,因此这些查询要快得多 [1]。但是,我认为您无法轻松地将未发布的 lucene 主干与休眠集成。

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

于 2011-08-05T03:06:29.137 回答