0

我运行 sql server 2012 并在 800K 行表上应用了 FTS 索引。该表以行中的任意数据填充。我使用讽刺来解析我的用户定义的文本,然后我搜索以下文本“

Zaphod gave him

我知道我在数据库中,因为我运行以下 sql

declare @searchterm nvarchar(max) = '%Zaphod gave him%'

select fact.id,<MyColumns>
from [dbo].[fact] as fact
where MyColumnAName like @searchterm or
      MyColumnBName like @searchterm 
      ....

Irony 引擎生成以下语句

 (( FORMSOF (INFLECTIONAL, Zaphod)  AND
    FORMSOF (INFLECTIONAL, gave) ) AND  
    FORMSOF (INFLECTIONAL, him) )

我将它添加到 sql

SELECT fact.id, KEY_TBL.RANK, <MyColumns>
FROM [dbo].[Fact] as fact
INNER JOIN FREETEXTTABLE(fact,*, '(( FORMSOF (INFLECTIONAL, Zaphod)  AND  
                                     FORMSOF (INFLECTIONAL, gave) ) AND  
                                     FORMSOF (INFLECTIONAL, him) )') AS KEY_TBL
ON fact.ID = KEY_TBL.[KEY]
ORDER BY RANK DESC

现在,具有两次确切文本的一行 - 在两个不同的行中位于具有该确切数字一次的许多行之后。
他们都获得相同的排名。
我可以在结果集中更早地设置这一行吗?
这样排序是不是因为排名不够精确?
谢谢。

4

1 回答 1

1

根据MSDN 文档,FREETEXTTABLE 不支持 FORMSOF。

FREETEXTTABLE 已经匹配您单词的屈折形式以及同义词(有关更多信息,请参阅FREETEXT 文档)。FREETEXT/FREETEXTTABLE 也不支持运算符,因此根据停止列表中的内容,它也可能匹配单词“AND”。(它还会查找单词“FORMSOF”和“INFLECTIONAL”,但它们可能不在您的索引中。但这不会影响您的搜索,因为 FREETEXT/FREETEXTTABLE 只需要匹配您的搜索字符串中的至少 1 个单词。)

FORMSOF 仅受 CONTAINS 和 CONTAINSTABLE 支持。

于 2013-06-12T13:26:02.103 回答