[groonga-dev,00717] Re: 全文検索カラム以外を含んだ検索について

Back to archive index

Takayuki Honda honda****@gmail*****
2012年 3月 7日 (水) 19:35:00 JST


本多と申します。

先日首題の件についてご対応頂きまして、誠にありがとうございます。
恥ずかしながらgithubから取ってきたソースでコンパイルする事が出来ず
正式リリースされたものでやっとコンパイル出来ました(それも人に頼んだ・・)
ので、簡単に速度を測ってみました。

まずご対応頂いたケース3「 全文検索以外の条件で絞り込む処理が遅い問題」
の方はlimit句を付ければ、早くなる事を確認出来ました。

select * from sample_beta where match(body) against
('12')  and type = 1 order by  match(body) against ('12') limit
0, 100;

groonga2.0.0+mroonga2.00(最適化on)  = 0.15sec
groonga2.0.0+mroonga2.00(最適化off) = 0.51sec
tritonn1.0.12+Mysql5.0.87           = 0.47sec

ただ、ケース2「count(*)等で件数を取得するだけでも応答が遅い問題」
の方が、2.00から追加されたmroonga_enable_optimizationにて、
最適化をoff/onしても結果が変わりませんでした。
かつtritonnよりも遅い結果となりました。

select count(*) from sample_beta where match(body) against ('12') ;

groonga2.0.0+mroonga2.00(最適化on)  = 0.54sec
groonga2.0.0+mroonga2.00(最適化off) = 0.54sec
tritonn1.0.12+Mysql5.0.87           = 0.11sec

テーブル定義
mroonga
CREATE TABLE `sample_beta` (
  `search_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `body` varchar(2000) COLLATE cp932_bin DEFAULT NULL,
  `type` tinyint(1) NOT NULL DEFAULT '1',
  `regist_datetime` datetime NOT NULL,
  `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`search_id`),
  FULLTEXT KEY `fidx_sample_beta_01` (`body`)
) ENGINE=mroonga DEFAULT CHARSET=cp932 COLLATE=cp932_bin

tritonn
CREATE TABLE `search_real_1_beta` (
  `search_id` bigint(20) unsigned NOT NULL auto_increment,
  `body` varchar(2000) collate cp932_bin default NULL,
  `type` tinyint(1) NOT NULL default '1',
  `regist_datetime` datetime NOT NULL,
  `update_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`search_id`),
  KEY `idx_search_real_01` (`type`,`search_id`),
  FULLTEXT KEY `fidx_search_real_01` USING NGRAM, NO NORMALIZE, 512 (`body`)
) ENGINE=MyISAM DEFAULT CHARSET=cp932 COLLATE=cp932_bin

レコード数=約210万件 (上記SQLでhitする件数は約20万件)
データサイズ=約200M インデックスサイズ=約500M

何処か抜けてる箇所がありますでしょうか?ご教示頂ければ幸いです。
以上よろしくお願い致します。

> 須藤です。
> 
> In <20120****@gmail*****>
>   "[groonga-dev,00695] Re: 全文検索カラム以外を含んだ検索について" on Wed, 01 Feb 2012 21:14:51 +0900,
>   Takayuki Honda <honda****@gmail*****> wrote:
> 
> >> 今回のケースは3.にあたるかと思います。
> >> mroongaでは、このうち1.と2.のみを実装していますが、3.と4.は
> >> 未実装です。
> > 上記の件了解致しました。
> > 対応を期待しつつ、現状では実データで試してみて、
> > 応答速度が許容範囲かどうか判断していきたいと思います。
> 
> 条件付きなのですが、gitリポジトリのmasterで対応してみました。
> 
> >> > ---------------------------------------------------
> >> > select 
> >> >     * 
> >> > from
> >> >     table
> >> > where 
> >> >     match(body) against (“さんぷる”) 
> >> > and 
> >> >     flag = 1
> >> > ---------------------------------------------------
> 
> ↑だけではなく、↑に加えてORDER BY LIMITを指定すると↓と同じ
> 論理で高速化するようにしました。
>   http://mroonga.github.com/ja/docs/userguide/storage.html#optimisation-for-order-by-limit-in-full-text-search
> 
> たとえば↓のような感じです。
> ---------------------------------------------------
> select 
>     * 
> from
>     table
> where 
>     match(body) against (“さんぷる”) 
> and 
>     flag = 1
> order by
>     match(body) against (“さんぷる”)
> limit
>     0, 100
> ---------------------------------------------------
> 
> これまでは、whereには全文検索条件1つのときしか「ORDER BY
> LIMIT 高速化」ができなかったのですが、全文検索条件と「簡単な
> 式」のwhereなら高速化するようにしました。
> 
> 今のところ、「簡単な式」のところは「カラム名 = INTの値」のみ
> だけサポートしています。が、ここは難しいというよりも手を動か
> していけば対応種類を増やせるところなので、要望が大きいところ
> から対応していく進め方が現実的かと思っています。(たとえば、
> DOUBLEの値に対応することや「カラム名 < INTの値」などに対応す
> ることも難しくありません。)
> 
> もし、1.20で期待した速度が出ない場合はこちらも試してみて結果
> を教えてもらえると嬉しいです。

-- 
Takayuki Honda <honda****@gmail*****>




groonga-dev メーリングリストの案内
Back to archive index