0

CV データベース テーブルで同じことを行うことになっている 2 つのクエリを実行しています。

  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、'cost accountant'、'cost accountants' (CONTAINSワイルドカードでもキャプチャします) をキャプチャします。CHARINDEX違いは、キャプチャするがキャプチャしない「cost accountant」の前の文字から生じる可能性がCONTAINSありますが、「cost」という単語の前に意味をなす文字は考えられません。

インデックス作成に何か問題があり、すべての結果を取得していない可能性はありますか? 自動変更を追跡するように設定されているため、正しくインデックスを作成する必要があります。

4

1 に答える 1

1
  1. これらの行はすべて索引付けされていますか?

  2. SQL FT はテキストを単語に分割するので、"xyzcost accountant" は見つかりませんが、おそらく問題ありません。それでも、"cost accountant" を (つまり、ワイルドカードなしで) 検索するとどうなるでしょうか?

  3. インデックス作成プロセスが完了したかどうかを確認する方法の詳細を次に示します。クエリがまだ実行されていない場合でも、一貫性のない結果が生成されることに注意してください (つまり、結果が少なくなります)。これは、FT の設計者が、システムがダウンタイムなしで新しいデータを更新および挿入できるようにしたいが、データの損失が少し発生する可能性があるためです。

  4. msdnのには、フレーズ検索とワイルドカードを組み合わせる方法は示されていません。代わりに「NEAR」を使用できますか?

于 2013-02-03T12:55:52.667 に答える