我有一个在标题栏上启用了全文搜索的表。我尝试使用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

10-05 20:31