[groonga-dev,03801] Re: pgroongaのlikeと@~の動作について

Back to archive index

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...
Descargar 



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