gpt4 book ai didi

sql-server-2008 - SQL Server 2008 中的 CONTAINS 谓词没有返回它应该返回的所有行

转载 作者:行者123 更新时间:2023-12-04 07:20:53 24 4
gpt4 key购买 nike

背景

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

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

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

CONTAINS(boatType, '"multihull"')

问题

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

短期解决方案

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

什么是长期解决方案?

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

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

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

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

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

最佳答案

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

The full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.

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

关于sql-server-2008 - SQL Server 2008 中的 CONTAINS 谓词没有返回它应该返回的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com