2008-09-16 10 views
5

私たちはプロジェクトでSQL Server 2005を使用しています。システムのユーザーは、「キーワード」を使っていくつかのオブジェクトを検索することができます。これを実装する方法は、これらの「キーワード」を含む可能性のある各テーブルの重要な列のフルテキストカタログを作成し、次にCONTAINSを使用して、ユーザーがそのインデックスの検索ボックスで入力するキーワードを検索します。SQL Serverの小インデックスを作成

たとえば、ムービーオブジェクトがあり、記事のタイトルと本文でキーワードを検索できるようにしたい場合は、タイトルとプロットの両方の列にインデックスを付けてからような何か:

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords) 

を(それが実際よりももう少し高度ですが、何がひどく複雑な)

例えば、彼らは「ターミネーター2」を見つけたいので、一部のユーザーは、自分の検索に番号を追加します。

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2' 

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"') 

実際にこれを行うことと等価である:ここでの問題は、既定のSQL Serverによって、その私の知る限りでインデックス短い単語、したがって、このような検索がやっていないだろう

と偽の結果が多すぎます。

SQL Serverで小さな単語のインデックスを作成する方法はありますか?好ましくは、私はむしろの数字のように1、2、21などのように索引付けしたいと思います。索引付け基準を定義する場所はわかりませんが、具体的なものでも可能です。


まあ、私はあなたが期待するもののリストから、「ノイズワード」を削除し、今の行動は少し違うが、それでもない、ということでした。

"ターミネーター2"の検索はしません(私はこれを作っています、私の雇用主は私たちがやっていることを明らかにすれば本当に幸せではないかもしれません...とにかく、原理は同じです)、私は何もを得ることはありませんが、私は2つの単語を含むオブジェクトがあることを知っています。

多分私は何か間違っていますか? ENG、ENU、NEU(ニュートラル)のノイズ設定から1〜9の数字をすべて削除し、インデックスを再生成して検索を試みました。

答えて

2

これらの「小さな単語」は、フルテキストインデックスによって「ノイズワード」とみなされます。ノイズワードのリストをカスタマイズすることができます。このblog postは詳細を提供します。ノイズワードファイルを変更するときは、フルテキストインデックスを再作成する必要があります。

0

私はノイズワードファイルについて知っていましたが、私はあなたの "ターミネーター2"の例があなたにまだ問題を与えている理由ではありません。このようなことに特化した人々が集まるMSDN Database Engine forumでこれを試してみてください。

0

あなたはどこの条件シンプルに含まれています(またはCONTAINSTABLE)組み合わせることができます。

SELECT *(タイトル、 ' "ターミネーター2"')が含ま作品と '%ターミネーター2%' のようなタイトルからは

CONTAINSがすべてのターミネーターを見つけている間、どこで「ターミネーター1」が除かれますか?

もちろん、エンジンは十分にスマートであり、コンディションではない状態から始めることができます。

関連する問題