3

スキルのリストを含み、全文索引が定義されているテーブルがあります (「colLanguage」という列が 1 つあります)。テーブルのエントリの 1 つは 'c#' ですが、(次の SQL を使用して) 'c#' を検索しても結果が返されません。

select * from FREETEXTTABLE(tblList, colLanguage, 'c#')

誰でも助けることができますか?

ありがとうK

4

2 に答える 2

1

私の知る限り、#は「ワードブレーカー」として登録されているため、インデックスには追加されません。このページで説明されているように、ワードブレーカーのリストから登録を解除できる場合があります。

http://msdn.microsoft.com/en-us/library/dd207002.aspx

于 2010-05-31T15:40:24.010 に答える
1

私の最終的な解決策は、「C#」が「c#」とは異なる方法で扱われるという事実に基づいています。「#」文字の前の文字が大文字の場合、「#」は単語分割文字として扱われません。したがって、フルテキスト インデックスが存在するテーブルを更新して、すべての 'c#' を 'C#' に変更するスクリプトを作成する必要がありました (次に、このスクリプトを SQL ジョブとして実行して、ラバー ケース c# がないことを確認します)。その「c#」を検索すると、コードで行った「C#」に変更されます。

または、SQL2008 があり、fts インデックスの全文言語を変更できる場合は、インデックス付き列のワード ブレーカーとして「ニュートラル」言語を使用するように設定できます。「ニュートラル」ワード ブレーカーは、白いテキストでのみ改行します。次に、fts コマンドを変更して、使用する言語としてそれを指定します。たとえば、select * from FREETEXTTABLE(tblList, colLanguage, 'c#', LANGUAGE 0) 'c#' または 'C#' を検索できます。再構築以外の変更は必要ありません*。あなたはインデックスを作成します。

*データベース インスタンスの「デフォルトのフルテキスト言語」を変更する必要があるかもしれません。

于 2010-07-09T11:47:26.773 に答える