当前位置:  开发笔记 > 数据库 > 正文

全文搜索排名(SQL Server)

如何解决《全文搜索排名(SQLServer)》经验,为你挑选了1个好方法。

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

我有一个包含5个cols + more的表,没有编入索引.一切都是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"或"JOHN*"或"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,则不会得到任何结果.



1> Frank Schwie..:

我发现AND和OR子句不适用于列.创建一个合并列的索引视图,您将获得更好的结果.查看我过去的问题,您将找到适合您的方案的信息.

我也发现我最好不要追加'*'.我认为它会出现更多的比赛,但它往往会带来更糟糕的结果(特别是对于长话).作为一个中间立场你可能只会附加一个*更长的单词.

你提供的示例案例肯定很奇怪.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有