0

大きなフルテキストインデックステーブルがあり、そのような文字列がいくつかあると仮定します(もちろん、フルテキストインデックス列に):

123.456.789/14  
111.222.22222.2/5111

これらの文字列は、私が書いたとおりにクエリされた場合にのみ(私のアプリケーションにとって)意味のある数値です。

このようなクエリを実行すると、次のようになります。

WHERE CONTAINS(field, "5111");

2番目の文字列を含む行を返しますが、文字列に5111が含まれている以外に意味がないため、結果が返されないことを期待していました(数字の一部ではなく、数字全体のみが意味を持ちます)。

私が言及したような文字列の一部を返すことを回避する方法はありますか?SQLサーバーは「/」と「。」を処理していると思います。ストップワードとして、私は正しいですか?

4

1 に答える 1

2

あなたの問題は実際にはストップワードではなく、ワードブレーカーにあります。

"/" と "。" 使用している(英語を想定している)ワードブレーカーによってワードセパレーターと見なされています。

カスタムワードブレーカーをインストールすることは可能ですが、数字ではなく単語の前後に「/」を単語の区切り文字と見なしたいので、これで実際に問題が解決するかどうかはわかりません。

理論的には、カスタム辞書のサポートを有効にして、単語と見なされる単語区切り文字を含むフレーズを指定できるようにすることは可能ですが、これでは希望どおりの結果が得られない場合があります。

あなたの例から、カスタム辞書で「789/14」と「2/5111」を定義することができます。これは、これらの行が「789」、「14」、「2」、または「5111」の検索では返されませんが、「789/14」または「2/5111」の検索では返されることを意味します。

次のブログエントリでは、SQL 2008でのカスタムディクショナリサポートの設定について説明していますが、それを機能させることができませんでした。

SQLServer2008フルテキストインデックスで「現状のまま」インデックスを作成する特別な用語のカスタム辞書を作成する

于 2011-07-08T21:32:31.323 に答える