在SQL Server 2008中包含谓词,也不返回它应该的所有行

时间:2012-08-25 07:31:53

标签: sql-server-2008 full-text-search contains

背景

在SQL Server 2008中,我在名为boats的表上使用名为boatType的列上的全文索引。

boatType字段包含船只所属的逗号分隔的boatType列表。例如" multihull,trimaran,cruiser"。

进行搜索的我的SQL查询使用CONTAINS谓词,如下所示:

CONTAINS(boatType,'" multihull"')

问题

一切正常,直到最近我注意到一个特定的行没有被返回,但是,其他具有完全相同数据的行被返回。

短期解决方案

我尝试通过从boatType列中删除全文索引来重建索引,然后重新添加它。我等待索引重新填充并修复了问题,即返回了所有预期的行。

长期解决方案是什么?

好的,所以问题在短期内得到解决,但如果这种情况一旦发生就会再次发生。

我假设(或许错误地)"更改跟踪=自动"全文索引上的设置意味着对数据的任何更新都会导致索引的自动更新。

我没有设置任何人口计划,因为我认为如果我使用"更改跟踪=自动"我不需要。再说一次,也许我错了。

为了支持我上面的假设,添加到数据库或更改的新数据确实会触发索引更新,因为搜索中应出现的大多数行都会出现。它只是少数。

这里最好的事情是什么?

1 个答案:

答案 0 :(得分:0)

您不能依赖于与MS Docs

的索引数据更新并行更新的全文索引
  

然后,全文索引在后台更新   传播的更改可能不会立即反映在索引中。

如果您需要将船型搜索设置为100%uptodate,请创建一个船型表和一个多对多的映射表,将船连接到船型。