gpt4 book ai didi

sql-server - SQL Server 全文搜索

转载 作者:行者123 更新时间:2023-12-02 08:36:19 29 4
gpt4 key购买 nike

我目前正在开发一个应用程序,其中有一个 SQL-Server 数据库,我需要进行全文搜索以允许我们搜索人名。

目前,用户可以在名称字段中输入 a 来搜索 3 个不同的 varchar 列。名字、姓氏、中间名

假设我有 3 行包含以下信息。

1 - 菲利普 - J - 弗莱

2 - 艾米 - NULL - 黄

3 - Leo - NULL - Wong

如果用户输入诸如“Fry”之类的名称,它将返回第 1 行。但是,如果他们输入 Phillip Fry、Fr 或 Phil,他们什么也得不到……而且我不明白为什么要这样做。如果他们搜索 Wong,他们会得到第 2 行和第 3 行,如果他们搜索 Amy Wong,他们又什么也得不到。

当前查询正在使用 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;
....

有什么想法吗...?为什么此全文搜索无法正常工作?

最佳答案

如果您只是搜索人名,那么甚至不使用全文索引可能符合您的最佳利益。当您有大型文本字段时,全文索引很有意义,但如果您主要处理每个字段一个单词,我不确定您会从全文索引中获得多少额外的 yield 。在搜索新记录之前等待全文索引重新索引本身可能是众多问题之一。

您可以只进行如下查询。按空格分割搜索字符串,并创建搜索词列表。

Select FirstName,MiddleName,LastName From person WHERE Firstname like @searchterm1 + '%'or MiddleName like @searchterm1 + '%'or LastName like @searchterm1 + '%'or Firstname like @searchterm2 + '%'etc....

关于sql-server - SQL Server 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com