mysql:5386
From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Sun, 21 Apr 2002 23:19:53 +0900
Subject: [mysql 05386] Re: Full-text Search
川合孝典です。 ----- Original Message ----- From: <moeru@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Sunday, April 21, 2002 11:13 AM Subject: [mysql 05383] Re: Full-text Search > 2002/04/21 07:37:46 +0900に"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>さんに頂 いた > 「[mysql 05381] Re: Full-text Search」への返事です。 > > モエルです。 (中略) > どうしようかと思うのが > ●データ入力してもらった際に全角スペースで入力された名前(商品名)と > 半角スペースのと2通りある。 > ●全角か半角スペースなどで区切られた名前(商品名)もある。 > > これらをどう区別するかって事なんです。 それをまずきちんと整理しない限り、正しい結果は得られないでしょう。 というかどういう検索をしたいのかも含めて、もう少し整理するべきなのでは? 商品名の完全一致だけを目指すのであれば、下記のようなことから あまり効果的とは思えません。 > Full-text Searchがどういう挙動をするのか興味ありますが だとすれば、ナマズ本あたりをご覧になることをお薦めします: 『Namazuシステムの構築と活用』 http://homepage2.nifty.com/baba_hajime/namazubook/ 私は古いのしか読んでませんが http://homepage2.nifty.com/baba_hajime/namazubook/v1/support.html (中略) > やっぱ、全文一致だと > WHERE title = 'Steve' and title = 'Lukather' and title = '&' > and title = 'Larry語'... > で20万レコードから検索するほうが > WHERE like '%Steve Lukather & Larry Carlton%' > を1万レコードから検索するよりかは、全然速かったりするんでしょうか? やり方とデータの大きさ次第でしょう。 全文検索といった場合、通常はある単位(単語など)に分割し、 検索文字列のためのテーブルを作成し、各検索文字列に対する インデックスを利用することで検索スピードを改善しようとします。 中間一致であれば全件を総ナメするしかありませんが、完全一致、 せめて前方一致であればインデックスが有効になります。 単純に件数の多い少ないでは決まりません。 ただしそうした場合、単語ごとにしか検索文字列を作っていなければ Steve Lukather & Larry Carltonを検索しても Steve, Lukather, &, Larry, Carltonの各単語が含まれている レコード、例えばSteve Carlton & Larry Lukather なんてちょっと 順番が違っているものであっても検索してくることがあるでしょう。 #検索サイトではよくあることですよね? それがイヤなら、"Steve Lukather & Larry Carlton"という語であっても 単語毎だけでなく、Steve Lukather、Steve Lukather & 、 Steve Lukather & Larry 、Steve Lukather & Larry Carlton、 Lukather & Larry Carlton 等々、各単語の組み合わせで、 各レコード用の検索文字列を作り出して、専用のテーブルに入れて いくことになるのでしょう。 ちなみに > WHERE title = 'Steve' and title = 'Lukather' and title = '&' and > title = 'Larry語'...なんてゲリ長い句になりますよね こんなに単純なSQLでは済みませんよ。第一、この条件では絶対成立 しないでしょう(titleがどんな文字列だと成立するかを考えてみては?) 完全にANDだけであれば検索対象のテーブルを複数違う名前で 参照するという方法もあるでしょうけれど、普通は対象になる title in ('Steve', 'Lukather', ....) とでもしてまとめて取ってきて対象レコード単位にポイントを計算する ような形になるとは思います。(というか自分ではそうしてます) そうか日本語であっても、ChaSenかKakasiで単語に分解して 各単語を16進数に変換して、各単語を空白で分けて、別の TEXTに突っ込むようにすれば動きそうだなぁ。 きちんと文字単位になるように区切り文字もつければ...。 #かなり強引だけど...ウズウズ。 =================================================== 川合 孝典 (Hippo2000) DBI日本語メーリングリスト管理人、Kansai.pm所属 kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx http://member.nifty.ne.jp/hippo2000 http://www.hippo2000.info/ 「Perlを256倍使うための本 DBI編」 発売中 http://member.nifty.ne.jp/hippo2000/p256dbi/p256dbi.htm そしてその次は...(^-^) ===================================================
5375 2002-04-20 22:23 [<moeru@xxxxxxxxxx> ] Full-text Search 5376 2002-04-20 23:19 ┗[とみたまさひろ <tomm] 5377 2002-04-20 23:35 ┗[<moeru@xxxxxxxxxx> ] 5378 2002-04-21 00:34 ┗[とみたまさひろ <tomm] 5379 2002-04-21 00:47 ┗[<moeru@xxxxxxxxxx> ] 5381 2002-04-21 07:37 ┣["KAWAI,Takanori" <GC] 5383 2002-04-21 11:13 ┃┗[<moeru@xxxxxxxxxx> ] -> 5386 2002-04-21 23:19 ┃ ┗["KAWAI,Takanori" <GC] 5387 2002-04-22 00:13 ┃ ┗[<moeru@xxxxxxxxxx> ] 5401 2002-04-25 11:06 ┃ ┗["KAWAI,Takanori" <GC] 5403 2002-04-25 12:14 ┃ ┗[<moeru@xxxxxxxxxx> ] 5404 2002-04-25 14:10 ┃ ┣["KAWAI,Takanori" <GC] 5407 2002-04-26 01:10 ┃ ┃┣[<moeru@xxxxxxxxxx> ] 5408 2002-04-26 07:44 ┃ ┃┃┗["KAWAI,Takanori" <GC] 5410 2002-04-26 09:47 ┃ ┃┃ ┗[<moeru@xxxxxxxxxx> ] 5411 2002-04-26 10:52 ┃ ┃┃ ┣["KAWAI,Takanori" <GC] 5417 2002-04-27 00:22 ┃ ┃┃ ┃┣[<moeru@xxxxxxxxxx> ] 5419 2002-04-27 12:30 ┃ ┃┃ ┃┗[Tatsuhiko Miyagawa <] 5421 2002-04-27 12:46 ┃ ┃┃ ┃ ┣["TOYOSHIMA, Masayuki] 5422 2002-04-27 13:06 ┃ ┃┃ ┃ ┃┣[Tatsuhiko Miyagawa <] 5423 2002-04-28 11:50 ┃ ┃┃ ┃ ┃┃┗["TOYOSHIMA, Masayuki] 5424 2002-04-28 18:36 ┃ ┃┃ ┃ ┃┗["KAWAI,Takanori" <GC] 5425 2002-04-28 18:50 ┃ ┃┃ ┃ ┗["KAWAI,Takanori" <GC] 5432 2002-05-05 14:58 ┃ ┃┃ ┃ ┗[<moeru@xxxxxxxxxx> ] 5416 2002-04-26 20:20 ┃ ┃┃ ┗[Hidetoshi OKAWA <hid] 5420 2002-04-27 12:46 ┃ ┃┗[Tatsuhiko Miyagawa <] 5405 2002-04-25 18:33 ┃ ┗[Hidetoshi OKAWA <hid] 5382 2002-04-21 08:04 ┗[とみたまさひろ <tomm]