Javascript 一种利用MongoDB进行模糊字符串搜索的有效方法

Javascript 一种利用MongoDB进行模糊字符串搜索的有效方法,javascript,string,mongodb,search,fuzzy-search,Javascript,String,Mongodb,Search,Fuzzy Search,我希望能够在给定字符串的情况下,从我的mongo数据库返回最接近匹配名称的列表。我希望尽可能高效地完成这项工作。举例来说,我的文档如下所示: const personSchema = new Schema({ name: { type: String, required: true } ...more fields }); 输入内容可能如下:Barcck Obmaa,我希望返回一个名单,上面的名字是Barack Obama 该算法应该考虑到这样一个事实,即作为名称前缀的字符串与

我希望能够在给定字符串的情况下,从我的mongo数据库返回最接近匹配名称的列表。我希望尽可能高效地完成这项工作。举例来说,我的文档如下所示:

const personSchema = new Schema({
    name: { type: String, required: true }
    ...more fields
});
输入内容可能如下:
Barcck Obmaa
,我希望返回一个名单,上面的名字是
Barack Obama

该算法应该考虑到这样一个事实,即作为名称前缀的字符串与该名称的匹配程度优于与名称相同但不是前缀的字符串

有许多算法利用预先计算的索引来加快这种搜索。两个引起我注意的是和,它们使用了Levenshtein或Jaro Winkler等算法。在我看来,应该有某种方法将这些技术集成到mongo数据库中,但似乎没有任何既定的方法


我能找到的最佳解决方案是中描述的基于n-gram的方法。这是我的最佳选择吗?

几年前,我致力于将一本医学书籍数字化,并发现使用soundex系统()的修改版本作为执行模糊搜索的一种手段非常有效,只需对整个单词使用soundex编号进行一点小小的修改

例如,“华盛顿”的实际soundex是

  • W-252(W,S为2,N为5,G为2,其余字母不计)
…而对于医学书籍,它会被编码为

  • 25235
当与“pf”或“ps”组合时,我也忽略了p,加上我在官方soundex上添加的一些其他小规则,我现在记不起来了。因此,这种改进的soundex系统允许医生在搜索医学文本时彻底改变单词的拼写。例如,以下两个单词的发音相同

  • 心理学=2242
  • sikawligy=2242
…因此搜索“sikawligy”将返回带有“psychology”的结果

不确定这是否准确地回答了你的问题,因为你似乎在寻找与某个拼写错误的胖子非常接近的匹配词,而我建议的是一种基于拼写错误的单词进行搜索的方法,这些单词听起来与正在寻找的实际单词相同


无论如何,希望这能有所帮助。

是的,我的问题更关心的是检查单词拼写的算法。然而,这很有趣,并且可能会与一个检查拼写的算法一起使用。