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

标签 sql-server sql-server-2005 full-text-search

在过去的几个小时里,我一直在搞乱 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/

相关文章:

sql-server - 如何将浮点列转换为日期时间?

mysql - 按 SUM 值范围分组 SQL

sql - IF NOT EXISTS vs @@ROWCOUNT - 性能

javascript - Mongoose 索引已经存在,有不同的选项

SQL:军事时间转换后在 AM/PM 之前添加空格

sql - SQL Server中使用LIKE关键字进行排名

mysql - 设置可序列化会使 2 个 select 语句成为原子吗? (两次选择之间的表格没有变化)

sql - 如何从 SQL Server 中的 try/catch 子句中获取内部错误

php - 将 Google 搜索查询转换为 PostgreSQL "tsquery"

ruby-on-rails - 我是否需要去除标签以改进搜索?