[groonga-dev,01688] Re: mroongaの全文検索がうまくできません

Back to archive index

Jiro Iwamoto jirok****@gmail*****
2013年 8月 26日 (月) 22:05:45 JST


林さん

お世話になっております。岩本です。
返信が遅くなってしまい申し訳有りません。

もっと瞬間的にレスポンスがあるのかと思いましたが、それくらいは
仕方ないんですね。。。

スペックをあげて試してみます。ありがとうございます。




2013年8月21日 19:02 HAYASHI Kentaro <hayas****@clear*****>:

>
> 林です。
>
>
> On Tue, 20 Aug 2013 21:11:56 +0900
> Jiro Iwamoto <jirok****@gmail*****> wrote:
>
> > 林さん
> >
> > お世話になっております。岩本です。
> > サンプルデータまで、、、ありがとうございます!
> >
> > データを作成してたところ、返答が遅くなってしまいました。申し訳ありません。
> >
> > 作っていただいたデータだと確かに速いですね。
> > 私の方も投入できるデータを作成しましたがデータ量を多くしてしまうとやはり遅いです。
> > http://jirox.net/dumpForML.zip
>
> データをダウンロードして実際に試してみました。
>
> >
> > mysql> select count(guid) from CombinedData where match(content)
> > against('事件' IN BOOLEAN MODE) and
> orgId='ee15e1b414ad4329b7d14c857bc91644'
> > and objId='e9823fae423b4b56859ba98cb8a3a8dc';
> > +-------------+
> > | count(guid) |
> > +-------------+
> > |         172 |
> > +-------------+
> > 1 row in set (11.20 sec)
> >
> > mysql> explain select count(guid) from CombinedData where match(content)
> > against('事件' IN BOOLEAN MODE) and
> orgId='ee15e1b414ad4329b7d14c857bc91644'
> > and objId='e9823fae423b4b56859ba98cb8a3a8dc';
> >
> +----+-------------+--------------+----------+---------------+---------+---------+------+------+-------------+
> > | id | select_type | table        | type     | possible_keys | key     |
> > key_len | ref  | rows | Extra       |
> >
> +----+-------------+--------------+----------+---------------+---------+---------+------+------+-------------+
> > |  1 | SIMPLE      | CombinedData | fulltext | orgId,content | content |
> 0
> >       |      |    1 | Using where |
> >
> +----+-------------+--------------+----------+---------------+---------+---------+------+------+-------------+
> > 1 row in set (0.06 sec)
> >
> > mysql> show indexes from CombinedData;
> >
> +--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------+
> > | Table        | Non_unique | Key_name | Seq_in_index | Column_name |
> > Collation | Cardinality | Sub_part | Packed | Null | Index_type |
> Comment |
> > Index_comment       |
> >
> +--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------+
> > | CombinedData |          0 | PRIMARY  |            1 | guid        | A
> >     |      657378 |     NULL | NULL   |      | BTREE      |         |
> >               |
> > | CombinedData |          1 | orgId    |            1 | orgId       | A
> >     |          29 |     NULL | NULL   |      | BTREE      |         |
> >               |
> > | CombinedData |          1 | orgId    |            2 | objId       | A
> >     |          29 |     NULL | NULL   |      | BTREE      |         |
> >               |
> > | CombinedData |          1 | content  |            1 | content     |
> NULL
> >      |        NULL |     NULL | NULL   |      | FULLTEXT   |         |
> > parser "TokenMecab" |
> >
> +--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------+
> > 4 rows in set (0.06 sec)
> >
> > インデックス的には問題はないように思うのですが、、、
> >
> >
>
> 問題なさそうですね。。。
>
> データの件数に応じてどの程度で結果が得られたら妥当か、というのは環境によるのでなんとも言えないのですが、
> なにかしらボトルネックになっている部分があるんじゃないかなぁ、という気がしています。
> なので、クエリを実行中の状況をtopコマンドなどで確認してみるといいんじゃないかと思います。
>
> 参考までに、頂いたデータで試した結果を以下に示します。
> 試した環境は [groonga-dev,01630] Re: mroongaの全文検索がうまくできません で書いたものです。
>
> 環境1. Ubuntu 13.04 MySQL 5.5.31 mroonga 3.06 CPU i7-2640M メモリ8G
>
> mysql> select count(guid) from CombinedData where match(content)
> against('事件' IN BOOLEAN MODE);
> +-------------+
> | count(guid) |
> +-------------+
> |       89072 |
> +-------------+
> 1 row in set (3.85 sec)
>
> mysql> select count(guid) from CombinedData where match(content)
>     -> against('事件' IN BOOLEAN MODE) and
> orgId='ee15e1b414ad4329b7d14c857bc91644'
>     -> and objId='e9823fae423b4b56859ba98cb8a3a8dc';
> +-------------+
> | count(guid) |
> +-------------+
> |         172 |
> +-------------+
> 1 row in set (3.88 sec)
>
> 上記からは全文検索が大半で、andによる絞り込みは誤差みたいな感じになっていることがわかります。
> また、岩本さんほどクエリの実行結果が遅くない、という状態です。
>
> 続けてクエリを実行すると、
>
> mysql> select count(guid) from CombinedData where match(content)
> against('事件' IN BOOLEAN MODE);
> +-------------+
> | count(guid) |
> +-------------+
> |       89072 |
> +-------------+
> 1 row in set (0.00 sec)
>
> mysql> select count(guid) from CombinedData where match(content)
> against('事件' IN BOOLEAN MODE) and orgId='ee15e1b414ad4329b7d14c857bc91644'
> and objId='e9823fae423b4b56859ba98cb8a3a8dc';
> +-------------+
> | count(guid) |
> +-------------+
> |         172 |
> +-------------+
> 1 row in set (0.00 sec)
>
> キャッシュが効いているのですぐに結果がかえってきました。
> (岩本さんの環境で二回目以降のクエリも遅いとかあるでしょうか?)
>
> topコマンドでクエリを実行中の状態を見てみると、CPU使用率も余裕があるし、I/Oの終了待ちがボトルネックになっているわけではない状態でした。
>
> --
> HAYASHI Kentaro <hayas****@clear*****>
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>



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