在SQL Server中搜索多个关键字,并根据匹配的最大值对结果进行排序
我想在tblSearch表的一列中搜索几个关键字 例如,关键字是sql、java、net。 列值如下所示在SQL Server中搜索多个关键字,并根据匹配的最大值对结果进行排序,sql,sql-server,Sql,Sql Server,我想在tblSearch表的一列中搜索几个关键字 例如,关键字是sql、java、net。 列值如下所示 acce java网络访问 共享java网络访问sql python 没有技术 sql server与 这里我想得到的结果是2,1,4 尝试使用like语句,但我应该如何根据匹配的关键字的最大数量对它们进行排序。我没有全文搜索的选项。有没有最简单的方法可以做到这一点,而不必使用许多类似的语句。全文搜索具有基于匹配的自动排序功能 如果您已经适当地构建了全文索引,并且ID列上有唯一的聚集索引(在
尝试使用like语句,但我应该如何根据匹配的关键字的最大数量对它们进行排序。我没有全文搜索的选项。有没有最简单的方法可以做到这一点,而不必使用许多类似的语句。全文搜索具有基于匹配的自动排序功能 如果您已经适当地构建了全文索引,并且ID列上有唯一的聚集索引(在您的示例中,我假设它由值1、2、3和4标记),那么您所要做的就是运行下面的查询
DECLARE @search varchar(100) = '"sql*" AND "java*" AND "net*"'
SELECT t.*
FROM tlbSearch t
INNER JOIN CONTAINSTABLE (tblSearch, searchColumn, @search) Ktbl ON T.ID = Ktbl.[key]
ORDER BY Ktbl.[rank] ASC
为了利用全文搜索,您必须使用适合全文的过滤功能。与类似的和=
在全文中的等价物是自由文本
和包含
,以及它们的自由文本表
,它们会自动返回包含所需排名
列的表格
此外,为了让它工作,你所有的关键字都需要在同一列中——结果是有点冗余,但这正是全文搜索所需要的。因此,您的tblSearch需要具有以下结构:
+----+----------------------------------+
| ID | searchColumn |
+----+----------------------------------+
| 1 | acce java net take |
| 2 | share java net access sql python |
| 3 | no tech |
| 4 | sql server with |
+----+----------------------------------+
(如果您想像我一样在Stackoverflow上发布包含数据的表,)关键字是存储逗号分隔列表的单变量吗?或者每个关键字都是独立的变量现在是单个变量,并在一个表中拆分,但是如果需要的话,我也可以将它们分开,这不是问题。