加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server全文检索

发布时间:2020-12-12 16:53:06 所属栏目:MsSql教程 来源:网络整理
导读:我正在处理一个应用程序,我们有一个SQL Server数据库,我需要一个完整的文本搜索工作,让我们搜索人们的名字. 目前用户可以输入搜索3个不同varchar列的名称字段.第一,最后,中间名 所以说我有3行,具有以下信息. 1 – 菲利普 – J – 炸 2 – Amy – NULL – Wong
我正在处理一个应用程序,我们有一个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 *

“菲尔”正在寻找“菲尔”这个词. “菲尔*”正在寻找以“菲尔”开始的每一个字

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读