鉴于您的数据存储在数据库中的某个位置:
Hello my name is Tom I like dinosaurs to talk about SQL.
SQL is amazing. I really like SQL.
我们希望实施网站搜索,允许访问者输入条款并返回相关记录。用户可能会搜索:
Dinosaurs
和SQL:
WHERE articleBody LIKE '%Dinosaurs%'
通过返回正确的记录集来处理问题。
如果用户误导恐龙,我们将如何应对? IE:
Dinosores
(可怜的疼痛迪诺)。我们如何搜索允许拼写错误?我们可以将我们在搜索中看到的常见拼写错误与正确的拼写相关联,然后搜索原始字词+更正后的字词,但维护时间非常耗时。
以编程方式的任何方式?
修改
出现SOUNDEX可能会有所帮助,但任何人都可以使用soundex给我一个输入搜索词的例子:
Dinosores wrocks
返回记录而不是:
WHERE articleBody LIKE '%Dinosaurs%' OR articleBody LIKE '%Wrocks%'
哪会返回squadoosh?
答案 0 :(得分:4)
如果您使用的是SQL Server,请查看SOUNDEX。
对于你的例子:
select SOUNDEX('Dinosaurs'), SOUNDEX('Dinosores')
返回相同的值(D526)。
你也可以使用DIFFERENCE函数(与soundex相同的链接)来比较相似度(4是最相似,0是最少)。
SELECT DIFFERENCE('Dinosaurs', 'Dinosores'); --returns 4
修改:
在寻找多文本选项之后,看起来这并不是那么容易。我会把你推荐给@Neil Knight提供的关于Fuzzt Logic答案的链接(给我+1,对我来说。)。
This stackoverflow article还详细说明了TSQL中模糊逻辑实现的可能来源。一旦响应者还概述了全文索引作为您可能想要调查的潜力。
答案 1 :(得分:3)
也许你的RDBMS有一个SOUNDEX
函数?你没有提到这里涉及哪一个。
答案 2 :(得分:3)
只是在那里抛出替代品。如果SSIS是一个选项,那么你可以使用模糊查找。
答案 3 :(得分:2)
我不确定是否可以引入单独的“搜索引擎”,但如果您查看Google Search Appliance或Autonomy等产品,这些产品可以索引SQL数据库并提供更多搜索选项 - 例如,处理拼写错误以及同义词,搜索结果加权,替代搜索建议等。
此外,SQL Server的全文搜索功能可以配置为使用同义词库,这可能会有所帮助: http://msdn.microsoft.com/en-us/library/ms142491.aspx
这是设置同义词库来处理常见拼写错误的人的另一个问题: FORMSOF Thesaurus in SQL Server
答案 4 :(得分:0)
简短的回答,大多数SQL引擎都没有内置任何可以对“胖手指”进行基于字典的修正的内容。 SoundEx确实可以作为一种工具来查找听起来相似的单词,从而纠正语音错误拼写,但如果用户输入“Dinosars”错过最后的U,或者真正“胖指”它并进入“Dinosayrs”,SoundEx会不会返回完全匹配。
听起来你想要谷歌搜索的某些内容“你的意思是 _ _ ?”特征。我可以告诉你,这并不像看起来那么简单。在10,000英尺的水平上,搜索引擎会查看每个关键字并查看它是否在已知“好”搜索词的“词典”中。如果不是,它使用类似于拼写检查器建议的算法来找到最接近匹配的字典单词(需要最少的字母替换,添加,删除和转置以将给定单词转换为字典单词)。这将需要一些繁重的过程代码,无论是在数据库中的存储过程或CLR Db函数中,还是在业务逻辑层中。
答案 5 :(得分:0)
您还可以尝试SubString()
,以消除前3个左右的字符。以下是如何实现这一目标的一个例子
SELECT Fname, Lname
FROM Table1 ,Table2
WHERE substr(Table1.Fname, 1,3) || substr(Table1.Lname,1 ,3) = substr(Table2.Fname, 1,3) || substr(Table2.Lname, 1 , 3))
ORDER BY Table1.Fname;