[pgsql-jp: 26736] Re: Likeの部分一致で検索

KAWAI,Takanori GCD00051 @ nifty.ne.jp
2002年 7月 17日 (水) 17:49:12 JST


川合孝典です。

----- Original Message -----
From: "Hashimoto, Masaru" <hashimoto-m @ comtecc.net>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Wednesday, July 17, 2002 5:08 PM
Subject: [pgsql-jp: 26729] Re: Likeの部分一致で検索


> 橋本です。
(中略)
> やはり全文検索エンジンを導入するのが一番いいですか。
「全文検索エンジン」を導入する前に
「全文検索エンジン」と同じコトをさせる、というか全文検索
エンジンをつくればええやんということなんだと思いますが。

(中略)
> ですので、もしデータベースのチューニングや
> SQL文の記述方法、アプリケーションの制御などで
> 少しでも早くできるのでしたら、そちらを取りたいと。
> (私が知らないだけで画期的な方法があったらうれしいのですが)
使用するデータ量、マシンスペック、目標とする時間によるでしょう。
#個人的にはスピードを求めるならハチドリさん使いますけど :-P

確実にいえることは中間一致では、データを総ナメにしますから
速度はでないでしょうということだけです。

全文検索といった場合、対象となるデータを、ある一定の単位の
文字列に分解し、それ毎のインデックスを作成しておきます。
そして検索の際には、それぞれの単位の文字列をベースに
完全一致で検索すればスピードをアップすることができる
ということが現在よく使われている考え方でしょう。

分割の単位としては、Nグラム的に文字をそのまま分解する
という方法ありますが、単語単位にする一般的です。
ただ日本語の場合、単語単位に分割するといっても一筋縄では
いきませんから、KakasiやChaSenといった分かち書きのための
ソフトを利用することになります。
(もちろん辞書によって単語と認識する単位にずれが生じるので
それがいやならNグラムってことになるでしょう。)

更新の頻度、データ量、マシンに掛けられる負荷にもよりますが、
単語ごとの索引となるテーブルを作成すること自体は、それほど
負荷がかからないでしょう。Text::ChaSenを使って、掲示板に
全文検索つけてますけど、レンタルサーバー会社から怒られた
ことないし(って、いい加減な答え...)

PS.
PostgreSQLのMLでMySQL-MLで出た話を伝えるのもなんですが、
もしかしたら参考になるかも、つまるところは「ナマズ本見てね」かな

全文検索って何だろう?
http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&
page=%c1%b4%ca%b8%b8%a1%ba%f7%a4%c3%a4%c6%b2%bf%a4%c0
%a4%ed%a4%a6%a1%a9

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr @ cpan.org GCD00051 @ nifty.ne.jp
   http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/
Perl 6開発補助金が底を突く?
 http://member.nifty.ne.jp/hippo2000/perlgrant.htm
===================================================




pgsql-jp メーリングリストの案内