web-dev-qa-db-ja.com

全文検索インデックスの略語

省略形に短縮されたさまざまな単語を含むテキスト列があります。たとえば、「被保険者」ではなく、列に「insd」が含まれる場合があります。 類義語辞典ファイル を使用して類義語のリストを作成できることを理解しています。「insd」を検索すると、「被保険」と「insd」の両方を含む行が返されます。完璧です。

ただし、列の他の略語には、次のようなスラッシュやアンパサンドなどの「特殊」文字が含まれています。

 t/p-サードパーティ
 o/s-反対側
 p/p-1人あたり
 i&o-内側と外側

これらの単語を含むクエリをCONTAINSまたはFREETEXTに理解させる方法はありますか?例えば:

SELECT *
FROM dbo.MyTable
WHERE FREETEXT(MyColumn, 't/p');

シソーラスファイルtsenu.xmlをインスタンスの正しい場所に作成しました。

 <XML ID = "Microsoft Search Thesaurus"> 
 <thesaurus xmlns = "x-schema:tsSchema.xml"> 
 <diacritics_sensitive> 0 </ diacritics_sensitive> 
 <expansion> 
 <sub> insured </ sub> 
 <sub> insd </ sub> 
 </ expansion> 
 <expansion> 
 <sub> t/p </ sub> 
 <sub>サードパーティ</ sub> 
 </ expansion> 
 <expansion> 
 < sub> o/s </ sub> 
 <sub>反対側</ sub> 
 </ expansion> 
 <expansion> 
 <sub> p/p </ sub> 
 <sub>一人当たり</ sub> 
 </ expansion> 
 </ thesaurus> 
 </ XML> 

そして、EXEC sys.sp_fulltext_load_thesaurus_file 1033;を使用してそれをロードしましたが、クエリは予期しない結果を返します。

7
Max Vernon

1つの単語として扱いたい特殊文字を含む単語を追加する場合は、ユーザー辞書を作成する必要があります。

SQL Server 2008フルテキストインデックスで「そのまま」インデックスが作成される特別な用語のカスタム辞書の作成

カスタム辞書のサイズには制限があることに注意してください。さらに、辞書が大きくなるほど、フルテキストが遅くなる可能性があります。

カスタム辞書は、AT&TやM&Mのように追加する単語のセットが限られている場合に最適です。これらの単語は、既定のWordの動作ではなく、1つのWordとして扱いたい特殊文字を繰り返し使用する可能性がある単語です。

カスタム辞書は、部品番号(例:JY-14562、PTW-14432など)のような単語には適していません。テーブルのすべての行がカスタム辞書の新しいエントリになります。場合によっては、数十万以上の一意の部品番号が存在する可能性があります。それはカスタム辞書の良い使い方ではないでしょう。このタイプの動作が必要な場合は、独自のワードブレーカーを作成することをお勧めします。ワードブレーカーの作成は十分に文書化されておらず、作成も簡単ではありませんが、特殊文字に遭遇したときに単語をどのように分割するかを決定できます。

4
Robert Beene