我对此进行了思考,并且一直在尝试提出有关如何模糊搜索数据库的解决方案,例如,如果用户键入了拼写错误。这个逻辑背后有什么明显的问题吗?它会工作吗,并且以前做过吗?
我们希望搜索的表:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
因此,我们存储原始文本正文以进行物理显示。其他两列用于通过以下方式预先计算的搜索:
声音
正文被分解成单词,然后翻译成其soundex版本。IE,生成的正文可能类似于:
H252 B54 C23 E33... etc
因此,有人可能会输入“恐龙”,而本文的正文为“恐龙”,则两者均等于B26。然后,我们对搜索词的soundex值运行一个LIKE。
字符编码
给定一个将char映射到质数的字符映射,即IE:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
如果用户打算键入“ hello”,但是他们切换了两个或多个字符(例如“ hlelo”),则他们求值的数字相同。将原始内容分解为单词,对每个单词进行素编码,然后存储在数据库中,从而得到一个类似于以下内容的字段:
330 6825 330 1050... etc
然后,我们可以像在此值上搜索以匹配错误类型。
好处
- 错字保护免受
- 防止拼音错误的拼写
- 更多非英语母语人士
- 可以使用任何语言(soundex可以在其中使用)
评论和想法?一种多层搜索。您当然可以通过权重返回值来使其更好(例如,文字文本匹配更有价值),但这是否是解决拼写错误和非英语使用者进行搜索的好方法?