none
SQL 2008 Fulltext Search の検索について RRS feed

  • 質問

  • 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 )
    GO

    CREATE 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

    2010年8月12日 6:08

回答

  • フルテキスト検索は、ワードブレイクされた単語単位で検索され、検索対象の文章の中に、"キリスト" などの文字が含まれていたとしても、ワードブレイクとして、"キリスト" と分割されなければ、検索キーワードに "キリスト" と指定したとしても、ヒットしません。

    以前のフォーラムでも書いたかも知れませんが、検索キーワードで指定した単語が含まれる文章をかならずヒットさせる必要性があるのであれば、フルテキストではなく、Like を使用するしかないと思います。

    恐らくですが、以下のように文章がなっているのであれば、"キリスト" でもヒットするのではないかと。

    "このように キリスト スペース で  区切ると 検索 できると 思います。"

    個人的には、英語など、単語単位で意味が明確になっている言語においては、フルテキスト検索は非常に有効だと思うのですが、日本語のように、どのように文章を区切ればよいのかが明確ではない言語には、不向きだと思っています。

     

     

     

    • 回答としてマーク 服部清次 2010年8月13日 8:23
    2010年8月12日 6:30
  • ご参考。

    フルテキストだとlikeと違った結果がかえってきた
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/769e8d99-84cb-4ac2-853b-b7d48df6af6b
    • 回答としてマーク 服部清次 2010年8月13日 8:23
    2010年8月12日 11:54

すべての返信

  • フルテキスト検索は、ワードブレイクされた単語単位で検索され、検索対象の文章の中に、"キリスト" などの文字が含まれていたとしても、ワードブレイクとして、"キリスト" と分割されなければ、検索キーワードに "キリスト" と指定したとしても、ヒットしません。

    以前のフォーラムでも書いたかも知れませんが、検索キーワードで指定した単語が含まれる文章をかならずヒットさせる必要性があるのであれば、フルテキストではなく、Like を使用するしかないと思います。

    恐らくですが、以下のように文章がなっているのであれば、"キリスト" でもヒットするのではないかと。

    "このように キリスト スペース で  区切ると 検索 できると 思います。"

    個人的には、英語など、単語単位で意味が明確になっている言語においては、フルテキスト検索は非常に有効だと思うのですが、日本語のように、どのように文章を区切ればよいのかが明確ではない言語には、不向きだと思っています。

     

     

     

    • 回答としてマーク 服部清次 2010年8月13日 8:23
    2010年8月12日 6:30
  • ご参考。

    フルテキストだとlikeと違った結果がかえってきた
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/769e8d99-84cb-4ac2-853b-b7d48df6af6b
    • 回答としてマーク 服部清次 2010年8月13日 8:23
    2010年8月12日 11:54
  • ありがとうございます。

    基本的問題点がよくわかりました。

    よく検討して、方針を考えたく思います。

     

    2010年8月12日 14:02
  • ありがとうございます。

    大変参考になりました。

    よく検討して、方針を考えてみます。

    2010年8月12日 14:05
  • kyodonet さん、

    こんにちは。
    フォーラム オペレーターの服部 清次です。

    MSDN/TechNet フォーラムをご利用いただき、ありがとうございます。
    今回、NOBTA さんと anningo さんの回答が役に立ったのではないかと思いましたので、
    勝手ながら、私の方で [回答としてマーク] のチェックを付させていただきました。

    また何か困ったことがありましたら、ぜひ MSDN/TechNet フォーラムをご利用ください。
    今後とも、よろしくお願いします。
    それでは、また。


    __________________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    2010年8月13日 8:25