我正在处理一个应用程序,我们有一个sql Server数据库,我需要一个完整的文本搜索工作,让我们搜索人们的名字.
目前用户可以输入搜索3个不同varchar列的名称字段.第一,最后,中间名
所以说我有3行,具有以下信息.
1 – 菲利普 – J – 炸
2 – Amy – NULL – Wong
3 – Leo – NULL – Wong
如果用户输入诸如“Fry”的名称,它将返回第1行.但是,如果他们进入Phillip Fry,或Fr,或Phil,他们什么也没有.我不明白为什么它这样做.如果他们搜索王,他们会搜索第2行和第3行,如果他们搜索艾美,他们再没有收到任何信息.
目前查询使用的是CONTAINSTABLE,但是我已经用FREETEXTTABLE,CONTAINS和FREETEXT切换了,结果没有任何明显的差异.表格方法是首选,因为它们返回相同的结果但排名.
这是查询.
.... @Name nvarchar(100),.... --""s added to prevent crash if searching on more then one word. DECLARE @SearchString varchar(100) SET @SearchString = '"'+@Name+'"' SELECT Per.Lastname,Per.Firstname,Per.MiddleName FROM Person as Per INNER JOIN CONTAINSTABLE(Person,(LastName,Firstname,MiddleName),@SearchString) AS KEYTBL ON Per.Person_ID = KEYTBL.[KEY] WHERE KEY_TBL.RANK > 2 ORDER BY KEYTBL.RANK DESC; ....
有任何想法吗…?为什么这个全文搜索不能正常工作?
解决方法
FreeTextTable应该工作.
INNER JOIN FREETEXTTABLE(Person,@SearchString)
@SearchString应该包含像“Phillip Fry”这样的值(一个长字符串,包含用空格分隔的所有查找字符串).
如果您想搜索Fr或Phil,您应该使用星号:Phil *和Fr *
“菲尔”正在寻找“菲尔”这个词. “菲尔*”正在寻找以“菲尔”开始的每一个字