试图了解我的全文搜索结果

时间:2013-06-12 08:52:35

标签: sql sql-server full-text-search sql-server-2012

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

Zaphod gave him

我知道我在db中运行以下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

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

1 个答案:

答案 0 :(得分:1)

根据MSDN documentation,FREETEXTTABLE不支持FORMSOF。

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

FORMSOF仅受CONTAINS和CONTAINSTABLE支持。