2009-02-25 7 views
13

SQL ServerデータベースにProductsテーブルがあり、フルテキストインデックス処理を使用する従来のストアドプロシージャのトラブルシューティングが必要です。ここでは、Productsテーブルに2つのフィールドID、Keywordsがあるとします。キーワードフィールドには次の情報が入力されます。SQLの問題:CONTAINS()を使用しても機能しませんがLIKEは正常に動作します

ローランドSA-300このローランドSA-300は、MINT状態の です。

SELECT * FROM Products WHERE CONTAINS(Keywords, ' SA-300 ') 
SELECT * FROM Products WHERE CONTAINS(Keywords, 'SA-300') 
SELECT * FROM Products WHERE CONTAINS(Keywords, '"SA-300"') 
SELECT * FROM Products WHERE CONTAINS(Keywords, '"*SA-300*"') 

:私は、次のいずれかの文を実行したときに

SELECT * FROM Products WHERE Keywords LIKE '%SA-300%' 

は、しかし、私はゼロの結果を得る:私は次のステートメントを実行すると

、私はレコードを取得することができていますしかし、私はこれらのいずれかを実行すると結果が得られるので、CONTAINS()関数が動作していることがわかります:

SELECT * FROM Products WHERE CONTAINS(Keywords, ' Roland ') 
SELECT * FROM Products WHERE CONTAINS(Keywords, 'Roland') 
SELECT * FROM Products WHERE CONTAINS(Keywords, '"Roland"') 
SELECT * FROM Products WHERE CONTAINS(Keywords, '"*Roland*"') 
SELECT * FROM Products WHERE CONTAINS(Keywords, 'Roland') 

CONTAINS()関数が 'SA-300'の用語で機能しない理由を理解する必要があります。私は全文索引に慣れているので、どんな助けもありがとうございます。

+2

ヒントはありませんが、インデックスが最新であることを確認しましたか? – MichaelGG

答えて

13

つの思考:

(1)ハイフンは、これらのリターンを何を 単語の区切りとして扱われるのでしょうか?

SELECT * FROM Products WHERE CONTAINS(Keywords, 'SA') 
SELECT * FROM Products WHERE CONTAINS(Keywords, 'SA 300') 
SELECT * FROM Products WHERE CONTAINS(Keywords, 'SA300') 

other questionを参照してください。

(2)フルテキストインデックスを再構築しましたか?それは古くなっている可能性があります。

+0

#2が正しいです。ありがとう – jessegavin

-1

あなたは

SELECT * FROM Products WHERE CONTAINS(Keywords, ' "SA-300" ') 

を試すことができ、私はあなたがmsdnにやろうとしているものの例を見ました。

+2

彼の質問から、彼はそれを試みました。 – GregD

+0

空白が重要かどうかはわかりませんでした。私はそうは思わない。 – ScArcher2

0

あなたのノイズワードファイルを見ましたか?私のマシンでは、c:¥Program Files¥Microsoft SQL Server¥MSSQL.1¥MSSQL¥FTData¥noiseENG.txtにあります。

これをテストできる方法は、特定のノイズファイルを1つのスペースで編集する方法ですすべてのインデックスを作成し、再度クエリを実行してください。私はテスト環境で、これを "テスト"します。

4

フルテキストインデックスを再構築する必要があることがわかりました。 @MichaelGGと@JohnFxのヒントをありがとう

1

Ah!ありがとう@GregD。 「this *」または「never *」を検索するときに、「this never ends」という文字列を検索していない検索がありました。 を出してください。の単語は両方ともnoiseENG.txtになっています。

それは問合せごとにこれをオフにすることが可能ですようにそれは見えませんが、これに基づいて: SQL 2008: Turn off Stop Words for Full Text Search Query

私は

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF 

を走り、我々は結果を我々の取得を開始欲しかった

関連する問題