トップ回答者
フルテキストだとlikeと違った結果がかえってきた

質問
-
SQL server 2000を使用しています。
現在like文を使って処理を行っていますが、時間がかかるのでフルテキストに切り替えようか検討しています。
ところがlike文と同じような検索をおこなったところ結果が違うことがわかりました。
select COLUMN from TABLE where COLUMN like '%BOOK%'
---結果---
BOOK1の登録
BOOK3の登録
BOOK5の登録
BOOK7の登録
BOOK9の登録
---------
select COLUMN from TABLE where contains(COLUMN,'BOOK')
---結果---
---------
ちなみに「BOOK7」で検索すると結果が返ってきます。
select COLUMN from TABLE where contains(COLUMN,'BOOK7')
---結果---
BOOK7の登録
---------
このような奇妙な結果が出るのではなぜなのでしょうか?
回答
-
フルテキスト検索は、ワードブレークされた文字に対して検索を行ないますが、like 文はすべての文字列に対して検索を行ないます。
そのため、フルテキストでは検索できなくて、like 文では検索できるということは、通常起こりえます。
今回の現象は、"BOOK7の登録" も文字列が、"BOOK7" "登録" という形で、ワードブレイクされたのではないかと。
個人的な意見としては、フルテキストは、Web 上のSearchなど、曖昧な検索には有効だと思いますが、必ずヒットさせないといけないという要件がある場合は、like 文にする必要があると思います。
※ 英語では、単語単位でワードブレイクされるので、ヒット率が高いのですが、日本語の文字列は、どのようにワードブレイクされるかによって、検索結果がことなるので、フルテキストには向いていないのではないかと思っています。
-
anningoさん、回答ありがとうございます。
'BOOK'→'"BOOK*"'にすることで、likeの場合と同じ結果を得ることができました。
ここでの「"」と「*」はどういった役割があるんでしょうかねぇ。
ためしに%OOK%でlike検索したものをフルテキストでも検索してみましたがこちらはダメでした。
select COLUMN from TABLE where COLUMN like '%OOK%'
---結果---
BOOK1の登録
BOOK3の登録
BOOK5の登録
BOOK7の登録
BOOK9の登録
---------
select COLUMN from TABLE where contains(COLUMN,'"*OOK*"')
---結果---
---------
うまくいきませんねぇ。
like文の時と同じに結果になってくれない曖昧さがあるようなので、
それも含めて検討してみます。- 回答としてマーク 山本春海 2010年6月23日 2:50
すべての返信
-
フルテキスト検索は、ワードブレークされた文字に対して検索を行ないますが、like 文はすべての文字列に対して検索を行ないます。
そのため、フルテキストでは検索できなくて、like 文では検索できるということは、通常起こりえます。
今回の現象は、"BOOK7の登録" も文字列が、"BOOK7" "登録" という形で、ワードブレイクされたのではないかと。
個人的な意見としては、フルテキストは、Web 上のSearchなど、曖昧な検索には有効だと思いますが、必ずヒットさせないといけないという要件がある場合は、like 文にする必要があると思います。
※ 英語では、単語単位でワードブレイクされるので、ヒット率が高いのですが、日本語の文字列は、どのようにワードブレイクされるかによって、検索結果がことなるので、フルテキストには向いていないのではないかと思っています。
-
anningoさん、回答ありがとうございます。
'BOOK'→'"BOOK*"'にすることで、likeの場合と同じ結果を得ることができました。
ここでの「"」と「*」はどういった役割があるんでしょうかねぇ。
ためしに%OOK%でlike検索したものをフルテキストでも検索してみましたがこちらはダメでした。
select COLUMN from TABLE where COLUMN like '%OOK%'
---結果---
BOOK1の登録
BOOK3の登録
BOOK5の登録
BOOK7の登録
BOOK9の登録
---------
select COLUMN from TABLE where contains(COLUMN,'"*OOK*"')
---結果---
---------
うまくいきませんねぇ。
like文の時と同じに結果になってくれない曖昧さがあるようなので、
それも含めて検討してみます。- 回答としてマーク 山本春海 2010年6月23日 2:50
-
こんにちは、ゲンガー さん。
anningo さんや、NOBTA さんからの情報が参考になったようですので、勝手ながら私のほうで回答としてマークさせていただきました。
anningo さん、NOBTA さん情報ありがとうございます。
いただいた情報のなかで、参考になったものや有効な情報には、回答としてマークすることで、今後同じ問題でこのスレッドを参照された方にも、有効な情報が目に留まりやすくなるかと思いますので、回答としてマークをお願いしています。
今回は私のほうで先にマークさせていただきましたが、ゲンガーさんも次回から回答としてマークしてみてくださいね。
現在ご確認いただいている結果についても、投稿お待ちしておりますので、よろしくお願いいたしますね。
それでは。
マイクロソフト株式会社 フォーラム オペレーター 山本 春海