6

プロジェクトで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の数字をすべて削除し、インデックスを再生成して、検索を試みました。

4

3 に答える 3

2

これらの「小さな単語」は、フルテキスト インデックスによって「ノイズ ワード」と見なされます。ノイズ ワードのリストをカスタマイズできます。詳細については、このブログ投稿を参照してください。ノイズ ワード ファイルを変更するときは、フル テキスト インデックスを再作成する必要があります。

于 2008-09-16T12:11:49.513 に答える
0

CONTAINS(またはCONTAINSTABLE)を単純なwhere条件と組み合わせることができます。

SELECT * FROM Movies WHERE CONTAINS(Title、'"Terminator 2"')and Title like'%Terminator 2%'

CONTAINSはすべてのターミネーターを検索しますが、どこで「ターミネーター1」が削除されます。

もちろん、エンジンは、同様の条件ではなく、CONTAINSで開始するのに十分スマートです。

于 2008-09-23T23:18:39.450 に答える
0

ノイズワードファイルについては知っていましたが、「ターミネーター2」の例でまだ問題が発生している理由ではありません。この種のことを専門とする人々がたむろしているMSDNデータベースエンジンフォーラムでこれを尋ねてみてください。

于 2008-09-16T21:51:03.927 に答える