Hiroyuki Sato
hiroy****@gmail*****
2015年 12月 24日 (木) 14:36:06 JST
須藤様 佐藤です。 ありがとうございます。 2015年12月23日(水) 18:44 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <CA+Tq-Rqdf7kHG7H=EkrWx=hB_6L05JSSr9Cf99R4j=tWBci****@mail*****> > "[groonga-dev,03792] pgroongaのlikeと@~の動作について" on Mon, 21 Dec 2015 > 10:06:37 +0000, > Hiroyuki Sato <hiroy****@gmail*****> wrote: > > > pgroongaの質問です。 > > サンプルをここに掲載しました。 > > https://github.com/hiroyuki-sato/pgroonga_like_test > > ありがとうございます!サンプルがあってとても助かります! > > > 1, likeのSQL > > > > 下記のSQLでpgroongaのインデックスが使われないようなのですが > > これはそういうものなのでしょうか? > > (7.1: クエリ1をごらんください) > > これだとそういうものです。 > > というのは、PostgreSQLではvarcharに対してLIKEを使えないから > です。PostgreSQLは、varcharに対してLIKEを使うように言われた > ときは、textにキャストしてから実行します。つまり、インデック > ス構築時の値とは違う値(中身は同じだけど型は違う)で検索して > いるのでインデックスを使えないということです。 > > create table url_lists ( > id int not null primary key, > url text not null > ); > > なので、というようにtextを使うようにするとインデックスを使え > るようになります。 > > そして、textの場合は > > create index > ix_url_url_lists2 > on > url_lists > using > pgroonga(url pgroonga.varchar_regexp_ops); > > はおかしい(urlがtextなのにvarchar用のoperator classを使おう > としている)ので消してください。 > > また、 > > create index > ix_url_url_lists > on > url_lists > using > pgroonga(url) > with > (tokenizer='TokenRegexp', normalizer=''); > > は、動くには動くんですが、正規表現のメリットを活かせないので、 > > create index > ix_url_url_lists > on > url_lists > using > pgroonga(url pgroonga.text_regexp_ops); > > の方がいいです。 > > > 2, JOIN Filter > > 上記のクエリプランをみると、Join FilterでURLのフィルタリングがされてい > > るようです。 > > Join filterはpgroongaのインデックスを参照するのでしょうか? > > 参照しないです。 > シーケンシャルに処理します。 > > > 3, @~の検索 > > > > 次のSQLですが、検索が0件になってしまいます。 > > http://aa\.yahoo\.co\.jp/だとちゃんと結果がでるのですが、 > > これはなぜなのでしょうか?、「.」は任意の一文字にマッチする > > と考えれば、正規表現的には間違えていないように思えます。 > > これは、前述の通り、インデックスの張り方がおかしいのと、 > PGroongaにバグがあったからです。(masterでは直しました。) > カラムとインデックスをtextに変えて masterをコンパイルして試してみましたが、動作はかわらない (検索結果が0件になる)ようです。 https://github.com/hiroyuki-sato/pgroonga_like_test/blob/master/create.sql#L6-L11 commit 40b7fe7cda9bd2a393aaccb4f1afdd2dda03a7e4 Author: Kouhei Sutou <kou****@clear*****> Date: Wed Dec 23 18:12:23 2015 +0900 Don't use range search with lexicon for full text search です。 クエリはこちらです。 SELECT u.url FROM url_lists u WHERE u.url @~ 'http://aa.yahoo.co.jp/'; https://github.com/hiroyuki-sato/pgroonga_like_test/blob/master/q4.sql Bitmap Heap Scan on url_lists u (cost=101.03..542.28 rows=12500 width=56) Recheck Cond: (url @~ 'http://aa.yahoo.co.jp/'::text) -> Bitmap Index Scan on ix_url_url_lists (cost=0.00..97.90 rows=12500 width=0) Index Cond: (url @~ 'http://aa.yahoo.co.jp/'::text) (4 rows) Time: 22.468 ms url ----- (0 rows) よろしくお願いします。 > > -- > 須藤 功平 <kou****@clear*****> > 株式会社クリアコード <http://www.clear-code.com/> > > Groongaベースの全文検索システムを総合サポート: > http://groonga.org/ja/support/ > パッチ採用 - プログラミングが楽しい人向けの採用プロセス: > http://www.clear-code.com/recruitment/ > リーダブルコードワークショップ: > > http://www.clear-code.com/services/code-reader/readable-code-workshop.html > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.osdn.me/mailman/listinfo/groonga-dev > -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B... Download