0

我们已经ContainsTable在 SQL Server 中实现了。问题是当我们按以下方式运行查询时

select DATAFILENAME 
from TableName
INNER JOIN CONTAINSTABLE (TableName, BOOLEANTEXT, '("xxxx" )  ') AS KEY_TBL ON DATAFILENAME = KEY_TBL.[KEY]  and CASETYPE like '%xxxx%'

这将返回大约 1200 条记录。

但我只想选择前 1000 名,这里的查询如下

select DATAFILENAME 
from TableName
INNER JOIN CONTAINSTABLE (TableName, BOOLEANTEXT, '("xxxx",*1000* )  ') AS KEY_TBL ON DATAFILENAME = KEY_TBL.[KEY]  and CASETYPE like '%xxxx%'** 

此查询将返回零记录。

我已经重建全文索引,将跟踪更改为自动。但仍然显示零结果。

如果我遗漏了一些要点,请提出建议。提前致谢

4

2 回答 2

2

您的两个查询是:

select DATAFILENAME
from TableName INNER JOIN
      CONTAINSTABLE(TableName, BOOLEANTEXT, '("xxxx" ) ')AS KEY_TBL
      ON DATAFILENAME = KEY_TBL.[KEY] and CASETYPE like '%xxxx%'

和:

select DATAFILENAME
from TableName INNER JOIN
      CONTAINSTABLE(TableName, BOOLEANTEXT, '("xxxx" ) ', 1000)AS KEY_TBL
      ON DATAFILENAME = KEY_TBL.[KEY] and CASETYPE like '%xxxx%'

第一个返回 1,200 条记录,第二个没有记录。

结论:返回的前 1000 行在使用指定条件时CONTAINSTABLE不匹配。TableName

如果您只想要 1,000 行,请使用top 1000

select top 1000 DATAFILENAME
from TableName INNER JOIN
      CONTAINSTABLE(TableName, BOOLEANTEXT, '("xxxx" ) ')AS KEY_TBL
      ON DATAFILENAME = KEY_TBL.[KEY] and CASETYPE like '%xxxx%'
order by KEY_TBL.rank desc;

请注意order by KEY_TBL.rank, 因此将首先返回最佳匹配行。

于 2014-04-24T02:30:52.610 回答
2

您可以通过top_n_by_rank在查询中包含以下内容来获得此信息:

select DATAFILENAME 
from TableName
INNER JOIN CONTAINSTABLE (TableName, BOOLEANTEXT, '("xxxx" )  ', 1000) AS KEY_TBL 
    ON DATAFILENAME = KEY_TBL.[KEY]  
    and CASETYPE like '%xxxx%'

1000术语将限制CONTAINSTABLE结果。

nb 如果 top_n_by_rank 与其他参数结合使用,则查询返回的行数可能少于实际匹配所有谓词的行数。top_n_by_rank 允许您通过仅调用最相关的命中来提高查询性能。因此,它可能返回少于 1000 条记录,具体取决于结果的相关性

于 2015-02-11T21:20:37.887 回答