Sta*_*low 60 algorithm scalability autocomplete autosuggest data-structures
我指的是当用户在Google中键入搜索字词时用于提供查询建议的算法.
我主要感兴趣的是:1.最重要的结果(最有可能是查询而不是匹配的任何东西)2.匹配子串3.模糊匹配
我知道你可以使用Trie或generalized trie来找到匹配,但它不符合上述要求......
这里提到类似的问题
小智 56
对于(嘿)令人敬畏的模糊/部分字符串匹配算法,请查看Damn Cool算法:
这些不会取代尝试,而是在尝试中防止暴力查找 - 这仍然是一个巨大的胜利.接下来,您可能想要一种限制trie大小的方法:
最后,您希望尽可能防止查找...
我只想说......这个问题的一个很好的解决方案是不仅仅包含三元搜索树.需要Ngrams和Shingles(Phrases).还需要检测字边界错误."地狱o"应该是"你好"......而"whitesocks"应该是"白袜子" - 这些都是预处理步骤.如果您没有正确预处理数据,那么您将无法获得有价值的搜索结果.三元搜索树是确定单词是什么的有用组件,也是当键入的单词不是索引中的有效单词时实现相关单词猜测的有用组件.
谷歌算法执行短语建议和更正.谷歌算法也有一些上下文的概念...如果你搜索的第一个单词是天气相关的,你将它们结合起来"weatherforcst"vs"monsoonfrcst"vs"deskfrcst" - 我的猜测是在幕后排名正在改变基于遇到的第一个单词的建议 - 预测和天气是相关的单词,因此预测得到了在你的平均猜测中的高排名.
word-partials(ngrams),短语 - 术语(shingles),word-proximity(word-clustering-index),三元搜索树(word-lookup).
soundex和levenshtein distance等工具可用于查找特定范围内的模糊匹配。
Soundex 查找听起来相似的单词,levenshtein distance 查找与另一个单词在一定编辑距离内的单词。