SQL 全文インデックス作成が # を含む単語の結果を返さないのはなぜですか?
-
08-06-2019 - |
質問
たとえば、SQL Server 2005 を使用した私のクエリは次のようになります。
SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#')
以下を使用すると結果を返す列 SearchField を使用するように定義されたフルテキスト インデックスがあります。
SELECT * FROM Table WHERE SearchField LIKE '%c#%'
# は特殊文字だと思うのですが、上記のクエリに対して FREETEXT を正しく機能させるにはどうすればよいですか?
解決
# char は句読点としてインデックス付けされているため無視されるため、単語のインデックス作成の無視リストから文字 C を削除することになるようです。
それを実行してインデックスを再構築した後、ローカルでテストしたところ、結果が得られました。
これらの特殊文字が無視されないように、インデックス付き列で別のワード ブレーカー言語を使用することを検討します。
編集:私も見つけました この情報:
c# は c としてインデックス付けされます (c がノイズ ワード リストにない場合は、後でノイズ ワード リストの詳細を参照してください)。ただし、C# は C# としてインデックス付けされます (Win2003 上で実行されている SQL 2005 および SQL 2000 では、C または c がノイズ内にあるかどうかに関係ありません)。単語リスト)。C# として保存されるのは C# だけではなく、# の後に続く大文字も同様です。逆に、c++ (および ++ が後に続くその他の小文字) は、c としてインデックス付けされます (c がノイズ ワード リストに含まれているかどうかに関係なく)。
他のヒント
Indexing Service のクエリ言語について、多くの複製が行われているヘルプ ページを引用します。
&、|、^、#、@、$、(,) などの特別に処理される文字をクエリで使用するには、クエリを引用符 (") で囲みます。
私の知る限り、全文検索は MSSQL
これもインデックス サービスによって行われるため、これが役立つ場合があります。