3

背景

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

boatType 字段包含一个以逗号分隔的船所属的boatType 列表。例如“多体船、三体船、巡洋舰”。

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

包含(boatType,'“多体”')

问题

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

短期解决方案

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

什么是长期解决方案?

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

我假设(可能是错误的)全文索引上的“更改跟踪 = 自动”设置意味着对数据的任何更新都会导致索引的自动更新。

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

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

在这里做的最好的事情是什么?

4

1 回答 1

0

您不能依赖MS Docs中的全文索引与索引数据的更新并行更新,

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

如果您要求船型搜索 100% 是最新的,请创建一个船型表和一个连接船到船型的多对多映射表。

于 2012-08-25T07:46:51.970 回答