我有一个在标题栏上启用了全文搜索的表。我尝试使用containstable进行加权搜索,但是我获得了Rank值的算术溢出。查询如下
SELECT ID, CAST(Res_Tbl.RANK AS Decimal) AS Relevancy , Title
FROM table1 AS INNER JOIN
CONTAINSTABLE(table1,Title,'ISABOUT("pétoncle" weight (.8), "pétoncle" weight (.8), "PÉTONCLE" weight (.8))',LANGUAGE 1036 ) AS Res_Tbl
ON ID = Res_Tbl.[KEY]
当我执行此查询时,我得到:类型为int的算术溢出错误,值= -83886083125.000076。
如果我删除两个';'中的一个在ISABOUT函数中,查询成功完成。
请注意,如果没有结果,则查询需要成功完成,因此您需要一些结果。
有人知道如何解决这个问题吗?
这个问题也在dba.stackexchange.com
最佳答案
限定词:由于我无法重新创建它,因此我不确定是否可以解决此问题。但是,这些是我所看到的。
首先,“&”号,井号和分号是断字符。这意味着,您实际上要搜索的是“ p”,“ 233”和“ toncle”,而不是搜索字符串“pétoncle”。显然,这不是您的意图。
我必须假设您在数据集中的某处有文本“pétoncle”。这意味着您需要完整的字符串。
您可以做几件事。
1)一起关闭停用词。您可以通过更改全文索引将其关闭来实现。
请注意,您必须将数据库设置为SQL Server 2008兼容性,这样才能不产生语法错误:
ALTER FULLTEXT INDEX ON Table1 SET STOPLIST OFF;
2)创建一个新的停止列表
如果创建一个空的Stoplist,则可以添加所需的停用词或复制系统停用列表,并删除不需要的停用词。 (我建议第二种方法)。
话虽如此,我无法在系统停止列表中找到&或#,因此它们可能是硬编码的。您可能只需要关闭非索引字表即可。
3)更改您的搜索以忽略“pétoncle”情况。
如果您从ISABOUT放下“pétoncle”并将其更改为“ p toncle”,则可能会起作用:
'ISABOUT("pétoncle" weight (.8), "p toncle" weight (.8))'
这些只是一些想法。就像我说的那样,如果无法访问系统或重新创建方案,我们将无济于事。
一些更多的信息,为您的研究乐趣:
Stopwords and Stoplists
Alter Fulltext Index syntax
FullText search using Thesaurus file and special characters