上下文:这是我从一个更大的存储过程中删除的部分,发现这是导致我的错误的部分。
我有一个数据表,非常简单地说它包含2条记录:
[Title]
Mitchell
Andrew
我有一个超级简单的查询:
SELECT TOP 1
[Title]
FROM [Post] p
where CONTAINS (p.Title, '"Andrew"' )
这成功返回1行(这表明此列上的任何索引都需要在那里工作),但是:
SELECT TOP 1
[Title]
FROM [Post] p
where CONTAINS (p.Title, '"Mitchell"' )
不会返回任何行。
我知道它是可选的,因为这确实会返回行:
SELECT TOP 1
[Title]
FROM [Post] p
where title like 'Mitchell'
我认为数据是错误的,因为当我在数据库的本地备份上运行它时,它会返回行。
所以我的问题是我还能做些什么来调查这个错误?
目前尝试重建索引(尽管此列未明确编入索引)
答案 0 :(得分:0)
您似乎错误地使用了CONTAINS
。根据{{3}},搜索到的文字是字,意思是一串没有空格或标点符号的字符。因此'"Mitchell"'
作为搜索字词无效。令人惊讶的是它没有返回任何行,但'"Andrew"'
确实没有。
您是否需要CONTAINS
,其复杂程度如何?您提供的数据(我理解为简化)甚至不需要模式匹配,更不用说匹配变形形式和同义词。 (Andrew
和Mitchell
没有变形形式或同义词。)简单的=
就足够了。
所以,答案是,你做错了。如果不需要CONTAINS
,请使用更直接的内容来简化您的查询和生活。并且,无论是否提供,都提供与您正在使用的函数的数据和语义一致的搜索项。
答案 1 :(得分:0)
感谢输入人员,
我在单个表上运行了索引,但没有使用以下命令重建the full text index目录:
ALTER FULLTEXT CATALOG [PostCatalog] REBUILD
完成后,我可以找到安德鲁和米切尔。
我认为我无法在本地复制的原因是当我恢复数据库时,它会自动重建它。
干杯球员