对几个字符串的全文搜索结果进行排名

时间:2016-08-22 10:06:24

标签: 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   xxx
bladi    tttytyt     
bla di  bladi

我还想做的是介绍某种排名,其中排名越大,匹配的字符串就越多。然后使用等级对结果进行下降排序:

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

1

我可以利用全文搜索进行搜索吗?感谢。

2 个答案:

答案 0 :(得分:1)

通常,您可以使用返回RANK列的FREETEXTTABLE

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

但在您的示例中,文字字符串不相关且always returns 0。尝试使用真实数据。

答案 1 :(得分:0)

您可以使用CONTAINSTABLE

  

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

mydomain.com/category-slug/article-slug