3

次の列を持つテーブル (MyTable) があります。

Col1: NameID VARCHAR(50) PRIMARY KEY NOT NULL Col2: Address VARCHAR(255)

データ例:

名前: '1 24' 住所: '1234 Main St.'

デフォルトのパラメータを使用してカタログを作成した後、テーブルに全文索引を作成しました。

次のクエリを実行するにはどうすればよいですか。

 SELECT * FROM MyTable
 WHERE CONTAINS(NameID, '1')
 AND CONTAINS(Address, 'Main St.');

しかし、私のクエリは結果を返していません。これはうまくいくので意味がありません:

 SELECT * FROM MyTable
WHERE CONTAINS(Address, 'Main St.');

そしてこれもそうです:

 SELECT * FROM MyTable
 WHERE CONTAINS(Address, 'Main St.')
 AND NameID LIKE '1%'

しかし、これも機能しません:

 SELECT * FROM MyTable
 WHERE CONTAINS(NameID, '1');

フルテキスト インデックスを設定するときに、この列を Address 列に含めるように選択したときに、インデックス付けされた主キー列 (名前) に対してクエリを実行できないのはなぜですか?

前もって感謝します!

4

2 に答える 2

4

NameID フィールドは varchar 型であるため、フルテキストはインデックス作成を適切に処理します。

CONTAINS(NameID, '1') が検索結果を返さない理由は、'1' (およびその他の小さな数字) がフルテキストによってノイズ ワードと見なされ、インデックス作成時に除外されるためです。

ストップ ワードのリストを取得するには、次のクエリを実行します -

select * from sys.fulltext_system_stopwords where language_id = 1033;

停止リストをオフにするか、変更する必要があります。その例は、ここにあります。

于 2012-10-22T17:41:11.857 に答える
0

ここでの最大の問題 (およびこれを反映するように質問を編集しました) は、主キーの名前を表す整数を持っていることです。フルテキスト カタログの Contains() 関数は互換性がありません。これは残念なことであり、私はまだ整数のカタログを操作する代わりの全文を探しています。

于 2012-10-18T20:15:14.240 に答える