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

时间:2019-06-17 17:48:54

标签: java elasticsearch

因此,我有500万个字符串的elasticsearch索引,例如:“ hello”,“你好”,“ hi”。只是我的机器人的一个短语。

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

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

我已经尝试过模糊搜索,但是对我来说它是不正确的。 我见过的最好的实现是:距离Levenshtein的postgres trigram,但是在500万个字符串中,它的运行速度很慢。

通常,我只需要Levenshtein距离。

1 个答案:

答案 0 :(得分:0)

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

例如,考虑短语THE EYESTHEY SEE,Levenshtein距离将具有100%的匹配度,因为它们具有相同的字符,但它们的含义不同。

先做三元组然后再进行Levenshtein会有所帮助,但是同样容易出错,actcat会给出错误的肯定匹配

我发现匹配单词Soundex或类似算法会产生更好的结果。

这是我发现在内部使用soundex的库。

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

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