プロジェクトでSQLServer2005を使用しています。システムのユーザーは、「キーワード」を使用していくつかのオブジェクトを検索することができます。これを実装する方法は、これらの「キーワード」を含む可能性のある各テーブルの重要な列のフルテキストカタログを作成し、CONTAINSを使用して、ユーザーがそのインデックスの検索ボックスに入力したキーワードを検索することです。
たとえば、Movieオブジェクトがあり、ユーザーが記事のタイトルと本文でキーワードを検索できるようにするには、[タイトル]列と[プロット]列の両方にインデックスを付けて、次のようにします。
SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)
(実際にはそれよりも少し進んでいますが、それほど複雑なものはありません)
一部のユーザーは検索に番号を追加しているため、たとえば「ターミネーター2」を検索したいとします。ここでの問題は、私が知る限り、デフォルトではSQL Serverが短い単語のインデックスを作成しないため、次のような検索を実行することです。
SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')
実際にはこれを行うのと同じです:
SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'
そして、私たちは大量の偽の結果を得ています。
SQL Serverに小さな単語のインデックスを強制する方法はありますか?できれば、1、2、21などの数字だけにインデックスを付けたいと思います。インデックス付けの基準をどこで定義するか、またはそれと同じくらい具体的にすることが可能であるとしても、わかりません。
さて、私はそれを行い、リストから「ノイズワード」を削除しました。今では動作が少し異なりますが、それでも期待どおりではありません。
「ターミネーター2」は検索されません(私はこれを作り上げているだけです。私たちが行っていることを開示すると、雇用主は本当に満足できないかもしれません...とにかく、用語は少し異なりますが、原則は同じです) 、何も得られませんが、2つの単語を含むオブジェクトがあることは知っています。
多分私は何か間違ったことをしているのですか?ENG、ENU、およびNEU(ニュートラル)のノイズ構成から1〜9の数字をすべて削除し、インデックスを再生成して、検索を試みました。