SQL - 使用LIKE运算符搜索数据库

时间:2011-03-03 15:22:59

标签: sql sql-like spelling

鉴于您的数据存储在数据库中的某个位置:

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?

6 个答案:

答案 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是一个选项,那么你可以使用模糊查找。

SSIS Fuzzy Lookup

答案 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;