[Ludia-users 214] Re: 全文検索+ORDER BY について

Back to archive index

motoi sugito m.sug****@gmail*****
2008年 4月 10日 (木) 20:53:31 JST


お世話になっております。杉藤です。

説明不足でした。申し訳ござません。

> SELECT count(*) FROM item WHERE descr %% '価格';
> SELECT pgs2getnhits();
> これらのクエリはそれぞれ何件ぐらい返ってきますか?
> この値がわからないと、何とも言えません…。

 この場合では10万件くらい返します。
 ただ、ありふれたフレーズを指定したクエリでは
 30万件以上を返す場合もございます。

 ちなみにパラメータ「ludia.max_n_sort_result」には
 「10000」を指定しております。

以上です。よろしくお願い致します。


08/04/10 に kousa****@nttda*****<kousa****@nttda*****> さんは書きました:
> 幸坂です。こんにちは。
>
> SELECT count(*) FROM item WHERE descr %% '価格';
> SELECT pgs2getnhits();
>
> これらのクエリはそれぞれ何件ぐらい返ってきますか?
> この値がわからないと、何とも言えません…。
>
> > -----Original Message-----
> > From: ludia****@lists*****
> > [mailto:ludia****@lists*****] On Behalf Of motoi
> > sugito
> > Sent: Tuesday, April 08, 2008 6:16 PM
> > To: ludia****@lists*****
> > Subject: [Ludia-users 212]全文検索+ORDER BY について
> >
> > はじめまして、杉藤と申します。
> > Ludiaについて質問させてください。よろしくお願い致します。
> >
> >
> > 【概要】
> > Ludiaを使って全文検索を実行し、且つその結果をソートして
> > 表示したいのですが、どうしても処理結果が返るのに10秒以上
> > 掛かってしまいます。
> > 検索結果を一瞬(せめて3秒以内)で返るようにしたいのですが、
> > 何かよい方法はございませんでしょうか?
> >
> >
> > 【環境】
> > O S : CentOS5.1
> > D B : PostgreSQL 8.3.1
> > Ludia : 1.5.0 (mecab-0.97 ipadic-2.7.0 senna-1.1.2)
> >
> >
> > 【詳細】
> > ◆以下の構造のテーブルがあり、400万件データを保持してます
> >
> > テーブル名:item
> >  colmun | type
> > ------------------------
> > title | varchar(512)
> > price | integer
> > descr | text
> > :
> > :
> >
> > ◆このテーブルには以下のインデックスを設定してます。
> > "idx_item_descr" fulltext (descr)
> > "idx_item_price" btree (price)
> >
> >
> > ◆このテーブルに対して次のようなSelect文を投げます。
> > すると結果が返るのに10秒以上掛かってしまいます。
> >
> > SELECT price, title FROM item WHERE descr %% '価格'
> >  ORDER BY price LIMIT 5 OFFSET 10;
> >
> >
> >
> > 【自分なりの調査結果】
> > ◆1.通常の全文検索のみの場合では、処理結果が返るのが早いです。
> >
> > # explain SELECT price, title FROM item WHERE descr %% '価格' LIMIT 5
> OFFSET
> > 10;
> > QUERY PLAN
> > ----------------------------------------------------------------------
> > ------
> > Limit(cost=11.40..16.98 rows=5 width=94)
> > ->Index Scan using idx_item_descr on item(cost=0.25..1029.75 rows=923
> > width=94)
> > Index Cond: (descr %% '価格'::text)
> >
> >
> >
> > ◆2.通常のORDER BYのみの場合でも、処理結果が返るのが早いです。
> >
> > # explain SELECT price, title FROM item ORDER BY price LIMIT 5 OFFSET 10;
> > QUERY PLAN
> > ----------------------------------------------------------------------
> > -------
> > Limit(cost=9.69..14.53 rows=5 width=94)
> > ->Index Scan using idx_item_price on item(cost=0.00..893871.38
> > rows=922639 width=94)
> >
> > ※この場合、ORDER BYの指定カラム「price」にBtree
> > インデックスが設定されているのでソート処理が走ら
> > ないので高速に結果が返ってます。
> >
> >
> >
> > ◆3.ところが1と2が組み合わさると遅くなってしまいます。
> >
> > # explain SELECT price, title FROM item WHERE descr %% '価格' ORDER BY
> > price LIMIT 5 OFFSET 10;
> > QUERY PLAN
> > ----------------------------------------------------------------------
> > -------
> > Limit(cost=1052.42..1052.43 rows=5 width=94)
> > ->Sort(cost=1052.40..1054.70 rows=923 width=94)
> > Sort Key: price
> >  ->Index Scan using idx_item_descr on item(cost=0.25..1029.75
> > rows=923 width=94)
> >  Index Cond: (descr %% '価格'::text)
> >
> > ※(2.の時に)走らなかったsortが走ってしまい。ここに大変時間が掛
> > かってしまいます。enable_sortをoffにしても解決できませんでした。
> >
> >
> > 以上です。解決策をご存知の方がおりましたら、教えていただきたく
> > 何卒よろしくお願い致します。
> >
> > _______________________________________________
> > Ludia-users mailing list
> > Ludia****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/ludia-users
>
> _______________________________________________
> Ludia-users mailing list
> Ludia****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ludia-users
>




Ludia-users メーリングリストの案内
Back to archive index