gpt4 book ai didi

sql-server - 全文搜索排名(SQL Server)

转载 作者:行者123 更新时间:2023-12-02 18:37:01 24 4
gpt4 key购买 nike

在过去的几个小时里,我一直在搞乱 SQL Server 全文搜索的各种不同变体。但是我仍然无法弄清楚排名是如何运作的。我遇到过几个例子,这些例子让我很困惑,因为他们的排名比其他人高。例如

我有一个包含 5 列以上未索引的表。全部都是 nvarchar 字段。

我正在运行这个查询(好吧......我用不同的名称重新输入)

SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between
SET @SearchString = '"'+@SearchString+'*"'
print @SearchString;

SELECT ms.ID, ms.Lastname, ms.DateOfBirth, ms.Aka, ms.Key_TBL.RANK, ms.MiddleName, ms.Firstname
FROM View_MemberSearch as ms
INNER JOIN CONTAINSTABLE(View_MemberSearch, (ms.LastName, ms.Firstname, ms.MiddleName, ms.Aka, ms.DateOfBirth), @SearchString) AS KEY_TBL
ON ms.ID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 0
ORDER BY KEY_TBL.RANK DESC;

因此,如果我搜索 11/05/1964 JOHN JACKSON,我会得到 "11/05/1964"OR "JOHN*"OR "JACKSON*" 并且这些结果:

ID -- First Name -- Middle Name -- Last Name -- AKA -- Date of Birth -- SQL Server RANK
----------------------------------------------------------------------------------
1 | DAVE | JOHN | MATHIS | NULL | 11/23/1965 | 192
2 | MARK | JACKSON | GREEN | NULL | 05/29/1998 | 192
3 | JOHN | NULL | JACKSON | NULL | 11/05/1964 | 176
4 | JOE | NULL | JACKSON | NULL | 10/04/1994 | 176

最后是我的问题。我不明白第 1 行和第 2 行如何排名在第 3 行之上,以及为什么第 3 行排名与第 4 行相同。到目前为止,第 2 行应该具有最高排名,因为搜索字符串也与名字和姓氏匹配作为出生日期。

如果我将 OR 更改为 AND,我不会得到任何结果。

最佳答案

我发现 AND 和 OR 子句不适用于跨列。创建一个合并列的索引 View ,您将获得更好的结果。查看我过去的问题,您会找到适合您情况的信息。

我还发现最好不要附加“*”。我认为它会出现更多匹配项,但它往往会返回更糟糕的结果(特别是对于长单词)。作为中间立场,您可能只在较长的单词后面附加 *。

您给出的示例确实很奇怪。

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

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