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