Javascript 一种利用MongoDB进行模糊字符串搜索的有效方法
我希望能够在给定字符串的情况下,从我的mongo数据库返回最接近匹配名称的列表。我希望尽可能高效地完成这项工作。举例来说,我的文档如下所示: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 该算法应该考虑到这样一个事实,即作为名称前缀的字符串与
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
- 心理学=2242
- sikawligy=2242
无论如何,希望这能有所帮助。是的,我的问题更关心的是检查单词拼写的算法。然而,这很有趣,并且可能会与一个检查拼写的算法一起使用。