java - 使用elasticsearch搜索最相似的字符串

标签 java elasticsearch

所以,我有包含 500 万个字符串的 Elasticsearch 索引,例如:“hello”、“how are you”、“hi”。只是我的机器人的短语。

那么,如何创建 Java Elasticsearch 查询来查找最相似的字符串。

例如:“你好吗,丹尼?” ->“你好吗”。

我尝试过模糊搜索,但它对我来说并不正确。 我见过的最好的实现是:postgres trigrams with Levenshtein distance,但在 500 万个字符串中它运行缓慢。

一般来说,我只需要编辑距离。

最佳答案

仅使用简单的 Levenshtein 距离将会是一个问题,因为它主要查看字符而不是整个单词及其出现的顺序。

例如,考虑短语 THE EYESTHEY SEE ,编辑距离将给出 100% 匹配,因为它们具有相同的字符,但它们意味着不同的东西。

先进行 trigrams,然后进行 Levenshtein 会有所帮助,但同样容易出错,其中 actcat 会给出误报匹配

我发现匹配单词Soundex或类似的算法可以给出更好的结果。

这是一个我发现在内部使用 soundex 很有用的库。

https://github.com/intuit/fuzzy-matcher

我还没有尝试过 500 万条记录,但看起来它是一个轻量级 Java 库,如果配置为在大型服务器上运行,应该会给出结果。

关于java - 使用elasticsearch搜索最相似的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56636441/

相关文章:

java - 菜单项加速键仅在菜单项显示后才起作用

java - 数组拆分部分时出现字符串错误

java - Android 上无法调用 URL

spring - elasticsearch 5.6.3兼容的spring数据elasticsearch版本

java - Java中按字符对字符串列表进行排序

java - Dockerized Java 应用程序死亡,没有错误消息,但独立运行良好

java - 使用 Java 客户端的 Elasticsearch 查询序列化

elasticsearch - Elasticsearch中的多个路由字段

elasticsearch - Elasticsearch在双引号之外标记化

mongodb - 在 kibana 的 elasticsearch 中有一个 not_analyzed 字段