0

我正在运行两个查询,它们应该在我们的 CV 数据库表上做同样的事情:

  1. CONTAINS(全文索引表 - 简历、全名等都包含在索引中)

     SELECT COUNT(1) 
     FROM [CVDatabase] 
     WHERE CONTAINS ((CVText, fullname, city, CompanyName, jobTitle, targetJobTitle),'"cost accountant*"') AND (Country='South Africa')
    

    结果数:300

  2. CHARINDEX(未编入索引)

    SELECT COUNT(1) 
    FROM [CVDatabase] 
    WHERE (CHARINDEX ('cost accountant', cvtext) > 0 OR 
           CHARINDEX ('cost accountant', fullname) > 0 OR 
           CHARINDEX ('cost accountant', city) > 0 OR
           CHARINDEX ('cost accountant', companyname) > 0 OR
           CHARINDEX ('cost accountant', jobtitle) > 0 OR
           CHARINDEX ('cost accountant', targetjobtitle) > 0) 
      AND (Country = 'South Africa')
    

    结果数:339

这是超过 10% 的差异。自然CHARINDEX会使用捕获“成本会计师”、“成本会计师”(也CONTAINS将使用通配符捕获)。差异可能来自“成本会计”之前的字符,它CHARINDEX会捕捉但不会CONTAINS- 但我想不出在“成本”这个词之前有任何意义的字符。

索引是否可能有问题,并且没有获取所有结果?它设置为跟踪自动更改,因此它应该正确索引。

4

1 回答 1

1
  1. 所有这些行都被索引了吗?

  2. SQL FT 会将文本拆分为单词,因此它不会找到“xyzcost accountant”,但这可能没问题。不过,如果您搜索“成本会计”(即没有通配符)会发生什么?

  3. 以下是有关如何检查索引过程是否已完成的一些详细信息。请注意,如果它没有您的查询仍然运行但产生不一致的结果(即较少的结果)。这是因为 FT 的设计者希望使系统能够在不停机的情况下更新和插入新数据,但可能会发生一些数据丢失。

  4. msdn 上的示例未显示如何将短语搜索与通配符结合使用。也许您可以改用“NEAR”?

于 2013-02-03T12:55:52.667 回答