我有以下要求: -
我有很多(比如 100 万个)值(名称)。用户将键入搜索字符串。
我不希望用户正确拼写名称。
所以,我想做一种谷歌“你的意思是”。这将列出我的数据存储中的所有可能值。这里有一个类似但不相同的问题。这没有回答我的问题。
我的问题: - 1)我认为将这些数据存储在 RDBMS 中是不可取的。因为那样我就不会对 SQL 查询进行过滤。而且我必须进行全表扫描。那么,在这种情况下应该如何存储数据呢?
2)第二个问题与此相同。但是,只是为了我的问题的完整性:我如何搜索大型数据集?假设数据集中有一个名字 Franky。如果用户键入为 Phranky,我如何匹配 Franky?我必须遍历所有名称吗?
我遇到了Levenshtein Distance,这将是找到可能的字符串的好方法。但同样,我的问题是我是否必须对数据存储中的所有 100 万个值进行操作?
3)我知道,谷歌通过观察用户行为来做到这一点。但我想在不观察用户行为的情况下做到这一点,即使用我还不知道的距离算法。因为前一种方法需要大量搜索才能开始!
4)正如柯克布罗德赫斯特在下面的回答中指出的那样,有两种可能的情况:-
- 用户输入错误的单词(编辑距离算法)
- 不认识单词的用户猜测(语音匹配算法)
我对这两个都很感兴趣。它们实际上是两个不同的东西。例如,Sean 和 Shawn 听起来一样,但编辑距离为 3 - 太高而不能被视为错字。