Sql server 对多个字符串的全文搜索结果进行排序

Sql server 对多个字符串的全文搜索结果进行排序,sql-server,tsql,full-text-search,sql-server-2014,Sql Server,Tsql,Full Text Search,Sql Server 2014,我从前端获取了一些字符串,我希望在全文索引视图中找到与这些字符串尽可能多的匹配的所有条目。示例字符串为: Bla di bladi 这可以转换为以下查询: SELECT * FROM [Schema].[SomeFullTextIndexedView] WHERE CONTAINS (*, '"*bla*" OR "*di*" OR "*bladi*"') 这很好用。让我们假设,为了进行论证,查询将返回以下结果: Column1 Column2 Column3 bla rte

我从前端获取了一些字符串,我希望在全文索引视图中找到与这些字符串尽可能多的匹配的所有条目。示例字符串为:

Bla di bladi
这可以转换为以下查询:

SELECT 
    *
FROM [Schema].[SomeFullTextIndexedView] 
WHERE CONTAINS (*, '"*bla*" OR "*di*" OR "*bladi*"')
这很好用。让我们假设,为了进行论证,查询将返回以下结果:

Column1 Column2 Column3
bla  rte     
bla di   xxx
bladi    tttytyt     
bla di  bladi
我还想介绍一种秩,其中秩越大,匹配的字符串越多。然后使用秩对结果进行向下排序:

Column1 Column2 Column3 Rank
bla di  bladi   3
bla di   xxx    2
bla  rte        1
bladi    tttytyt     

1
全文搜索中有什么我可以利用的吗?谢谢。

通常,您可以使用返回排名列的:

SELECT 
    *
FROM [Schema].[SomeFullTextIndexedView]  AS t 
INNER JOIN FREETEXTTABLE([Schema].[SomeFullTextIndexedView] , *, '"*bla*" OR "*di*" OR "*bladi*"') as k ON t.Id = k.[key]
ORDER BY k.[RANK] DESC
但在您的示例中,文本字符串是不相关的。在真实数据上试用。

您可以使用

CONTAINSTABLE生成的表包含一个名为RANK的列。这个 秩列是每行的一个值(从0到1000),表示 行与选择标准的匹配程度


注意:
orderbyrank
not
KEY
这非常有效。我只是好奇在这种情况下我如何实现模糊搜索?假设提供的搜索字符串是bal,但数据库仅包含字符串bla和bladi。@csetzkorn MSSQL Server全文搜索适用于简单的文本搜索。我用它工作了大约一年,我可以说,如果你想做一些比简单的CONTAINS或FREETEXTTABLE更复杂的事情,这将变得非常困难。如果您需要构建复杂的文本搜索系统,请使用ElasticSearch之类的工具。您应该使用CONTAINSTABLE,而不是在CONTAINS搜索条件中,其中AND是一个关键字,当在freetext_字符串中使用时,“AND”一词被视为干扰词或停止词,将被丢弃。这是一个很长的时间,但以防万一,其他人正在寻找这个。您不能使用
包含
自由文本
对数据进行排名。实际上,您应该使用
CONTAINSTABLE
CONTAINSTABLE
,查看
SELECT  *
FROM [Schema].[SomeFullTextIndexedView] t 
INNER JOIN CONTAINSTABLE([Schema].[SomeFullTextIndexedView], ColumnToSearch, '"*bla*" OR "*di*" OR "*bladi*"') c
    ON t.ID = c.[KEY]
ORDER BY [RANK] DESC