トップ回答者
SQL 2008 Fulltext Search の検索について

質問
-
MS SQL Server2008でフールテキスト掛けた物を検索する時検索がうまく出来ない場合があります。
現象1→”キリスト”検索した時テキストの中にはキリストっていう単語がありますけど検索に掛からない。
現象2→”キリスト教”で検索した時上の場合と同じ現象発生。
現象3→”どうでもいい”、”信じでいるものである”等文章で検索した場合、該当単語及び文章がいなくても
検索に掛かる。
以上の現象があるのでこれを回避及び解決できる方法があれば教えてほしいです。
宜しくお願いします。実験検索クエリ
1.select * from TT_FILES where mtseqno = 65 and contains(filedata , 'キリスト')
2.select * from TT_FILES where mtseqno = 65 and contains(filedata , 'キリスト教')
3.select * from TT_FILES where mtseqno = 65 and contains(filedata , 'どうでもいい')
テーブルの構造
CREATE TABLE TT_FILES
(
RegId uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE,
MtSeqNo NUMERIC(10,0) NULL,
CabSeqNo NUMERIC(10,0) NOT NULL,
PageNo NUMERIC( 6,0) NULL,
FileName VARCHAR( 255) NULL,
FileExt VARCHAR( 10) NULL,
Version VARCHAR( 10) NULL,
FileData VARBINARY(MAX) FILESTREAM NOT NULL,
TimeStamp TIMESTAMP NOT NULL,
DelGubun VARCHAR( 1) DEFAULT ('N') NULL CHECK (DelGubun IN ('Y','N'))
CONSTRAINT [PK_TT_FILES] PRIMARY KEY CLUSTERED
(
[RegId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY]
CREATE INDEX TT_FILES_IDX1 ON TT_FILES ( RegId )
CREATE INDEX TT_FILES_IDX2 ON TT_FILES ( MtSeqNo )
CREATE INDEX TT_FILES_IDX3 ON TT_FILES ( CabSeqNo )
GOCREATE FULLTEXT CATALOG i2DSearch AS DEFAULT;
CREATE FULLTEXT INDEX ON TT_FILES (FileData TYPE COLUMN FileExt)
KEY INDEX PK_TT_FILES
ON i2DSearch
WITH CHANGE_TRACKING AUTO
回答
-
フルテキスト検索は、ワードブレイクされた単語単位で検索され、検索対象の文章の中に、"キリスト" などの文字が含まれていたとしても、ワードブレイクとして、"キリスト" と分割されなければ、検索キーワードに "キリスト" と指定したとしても、ヒットしません。
以前のフォーラムでも書いたかも知れませんが、検索キーワードで指定した単語が含まれる文章をかならずヒットさせる必要性があるのであれば、フルテキストではなく、Like を使用するしかないと思います。
恐らくですが、以下のように文章がなっているのであれば、"キリスト" でもヒットするのではないかと。
"このように キリスト スペース で 区切ると 検索 できると 思います。"
個人的には、英語など、単語単位で意味が明確になっている言語においては、フルテキスト検索は非常に有効だと思うのですが、日本語のように、どのように文章を区切ればよいのかが明確ではない言語には、不向きだと思っています。
- 回答としてマーク 服部清次 2010年8月13日 8:23
すべての返信
-
フルテキスト検索は、ワードブレイクされた単語単位で検索され、検索対象の文章の中に、"キリスト" などの文字が含まれていたとしても、ワードブレイクとして、"キリスト" と分割されなければ、検索キーワードに "キリスト" と指定したとしても、ヒットしません。
以前のフォーラムでも書いたかも知れませんが、検索キーワードで指定した単語が含まれる文章をかならずヒットさせる必要性があるのであれば、フルテキストではなく、Like を使用するしかないと思います。
恐らくですが、以下のように文章がなっているのであれば、"キリスト" でもヒットするのではないかと。
"このように キリスト スペース で 区切ると 検索 できると 思います。"
個人的には、英語など、単語単位で意味が明確になっている言語においては、フルテキスト検索は非常に有効だと思うのですが、日本語のように、どのように文章を区切ればよいのかが明確ではない言語には、不向きだと思っています。
- 回答としてマーク 服部清次 2010年8月13日 8:23
-
kyodonet さん、
こんにちは。
フォーラム オペレーターの服部 清次です。MSDN/TechNet フォーラムをご利用いただき、ありがとうございます。
今回、NOBTA さんと anningo さんの回答が役に立ったのではないかと思いましたので、
勝手ながら、私の方で [回答としてマーク] のチェックを付させていただきました。また何か困ったことがありましたら、ぜひ MSDN/TechNet フォーラムをご利用ください。
今後とも、よろしくお願いします。
それでは、また。
__________________________________________________
マイクロソフト株式会社 フォーラム オペレーター 服部 清次