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

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2012年 2月 1日 (水) 14:31:15 JST


須藤です。

In <20120****@gmail*****>
  "[groonga-dev,00689] 全文検索カラム以外を含んだ検索について" on Tue, 31 Jan 2012 18:26:06 +0900,
  Takayuki Honda <honda****@gmail*****> wrote:

> Fulltext_index対象以外のカラムを含んだ検索をする場合、
> tritonnですと、2ind index機能を当てにして、
> 下記のようなクエリを実行していました。
> 
> --------------------------------------------------
> select 
>     * 
> from
>     table force index(idx01) 
> where 
>     match(body) against (“さんぷる”) 
> and 
>     flag = 1
> ---------------------------------------------------
> 
> mroongaですと、force indexを外して下記のようになると思いますが、
> 
> ---------------------------------------------------
> select 
>     * 
> from
>     table
> where 
>     match(body) against (“さんぷる”) 
> and 
>     flag = 1
> ---------------------------------------------------
> 
> この場合の動作は、まず全文検索を実行した後、
> 検索対象の通常カラムのみを読み込んで、対象行を特定するのか、
> はたまた逆なのか、どちらになりますでしょうか。

「まず全文検索を実行した後、検索対象の通常カラムのみを読み込
んで、対象行を特定するのか」になります。
(MySQLのクエリ実行プランを考えているところも関係するので、
全体のレコード数やヒット件数によっては異なるかもしれません。)


さて、Tritonnの2ind機能では以下の4種類の問題を解決していまし
た。
  http://qwik.jp/tritonn/userguide.html#0cb0baa8b27d86e9233f601a9cc9cc4f

1. limit指定で出力を制限しても応答が遅い問題
     select columns from table where match(a) against(b) limit 1000, 10
2. count(*)等で件数を取得するだけでも応答が遅い問題
     select count(*) from table where match(a) against(b);
3. 全文検索以外の条件で絞り込む処理が遅い問題
     select columns from table where match(a) against(b) and c like 'hoge%';
4. 全文検索以外の条件でソートする処理が遅い問題
     select columns from table where match(a) against(b) order by c;

今回のケースは3.にあたるかと思います。

mroongaでは、このうち1.と2.のみを実装していますが、3.と4.は
未実装です。

1.に相当する「全文検索時の ORDER BY LIMIT 高速化」:
  http://mroonga.github.com/ja/docs/userguide/storage.html#optimisation-for-order-by-limit-in-full-text-search
2.に相当する「行カウント高速化」:
  http://mroonga.github.com/ja/docs/userguide/storage.html#optimisation-for-counting-rows


で、3.についてはcond pushという仕組みで実現できそうなのです
が、まだ手を付けられていません。4.についてはまだ検討していま
せん。

未着手な改善案がいくつかあるので、要望等に応じて優先順位をつ
けて開発していきたいと思っています。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る