我运行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
现在,一行具有两次精确文本 - 在两个不同的行中,位于具有此确切数字的许多行之后。
他们都得到相同的级别
我可以在结果集中更早地设置此行吗?
这样排序是因为等级不够精确吗?
感谢。
答案 0 :(得分:1)
根据MSDN documentation,FREETEXTTABLE不支持FORMSOF。
FREETEXTTABLE已经匹配您的单词的变形形式以及同义词(有关详细信息,请参阅FREETEXT documentation)。 FREETEXT / FREETEXTTABLE也不支持运算符,因此根据您的停止列表中的内容,它也可能与单词“AND”匹配。 (它也会查找单词“FORMSOF”和“INFLECTIONAL”但它们可能不在您的索引中。但这不会影响您的搜索,因为FREETEXT / FREETEXTTABLE只需要在搜索字符串中匹配至少1个单词。)
FORMSOF仅受CONTAINS和CONTAINSTABLE支持。