<html><body><div style="color:; background-color:; font-family:MS PGothic, sans-serif;font-size:12pt"><div><span>清河です。</span></div><div><br></div><div>迅速かつ丁寧な説明ありがとうございます。</div><div><br></div><div>なるほど、理解できました。</div><div>また、@@演算子で問題なく検索できることも確認できました。</div><div><br></div><div>ありがとうございました。</div><span><div><br></div><div><br></div></span><div><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;">    <div style="font-family: MS PGothic,sans-serif; font-size: 12pt;">        <div style="font-family: MS PGothic,sans-serif; font-size: 12pt;">            <div dir="ltr">            <font face="Arial" size="2">                ----- Original Message -----<br>                <b><span style="font-weight:bold;">From:</span></b> Kouhei Sutou
 &lt;kou****@clear*****&gt;<br>                <b><span style="font-weight: bold;">To:</span></b> groon****@lists*****                <br>                <b><span style="font-weight: bold;">Date:</span></b> 2016/6/7, Tue 14:15<br>                <b><span style="font-weight: bold;">Subject:</span></b> [groonga-dev,04051] Re: pgroongaの@@演算子が効かない<br>            </font>            </div>            <br>須藤です。<br><br>In &lt;<a href="mailto:40321****@web10*****" target="_self" ymailto="mailto:40321****@web10*****">40321****@web10*****</a>&gt;<br>&nbsp; "[groonga-dev,04050] pgroongaの@@演算子が効かない" on Tue, 7 Jun 2016 13:56:45 +0900 (JST),<br>&nbsp; 清河 宗一朗 &lt;<a href="mailto:iftha****@yahoo*****" target="_self" ymailto="mailto:iftha****@yahoo*****">iftha****@yahoo*****</a>&gt; wrote:<br><br>&gt;
 また、idx_t_tempインデックスを作成しなくても、下記SQLが動作したのです<br>&gt; が、<br>&gt; そういうものなのでしょうか。<br>&gt;  select * from t_temp where for_search %% 'pgroonga';<br>&gt;  select * from t_temp where for_search %% 'postgres';<br><br>はい、そういうものです。<br><br>PostgreSQLではオプティマイザーの判断によって同じ演算子を使っ<br>た条件でもインデックスを使ったり使わなかったり(= シーケンシャ<br>ルスキャン)します。<br><br>インデックスがない場合は必ずシーケンシャルスキャンになるので<br>すが、PGroongaが提供する演算子(のほとんど)はシーケンシャル<br>スキャンでも動くようになっているので、インデックスがなくても<br>動きます。<br><br>&gt; =&gt; select * from t_temp where for_search @@ 'pgroonga OR postgres';<br>&gt; id |
 for_search<br>&gt; ----+------------<br>&gt; (0 行)<br><br>これは@@をシーケンシャルスキャンで実行しようとしているからで<br>す。PGroongaが提供する@@はシーケンシャルスキャンをサポートし<br>ているのですが、演算子を探す優先順位の関係でPGroongaが提供す<br>る@@ではなくPostgreSQLが提供する@@が使われていてこうなります。<br><br>PostgreSQLが提供する@@は「X OR Y」という構文ではなく「X | Y」<br>という構文を使います。これはtextをtsqueryという型に変換する<br>ときに使われている構文です。<br><br><a href="https://www.postgresql.org/docs/current/static/datatype-textsearch.html#DATATYPE-TSQUERY" target="_blank">https://www.postgresql.org/docs/current/static/datatype-textsearch.html#DATATYPE-TSQUERY</a><br><br>そのため、「pgroonga OR
 postgres」は「pgroonga」または<br>「postgres」ではなく「pgroonga OR postgres」そのものを検索し<br>ます。なのでヒットしません。<br><br><br>説明が長くなってしまいましたが、ようはPostgreSQLが提供する@@<br>ではなくPGroongaが提供する@@を使うようにすればよいです。<br><br>どうすればよいかというと<br><br>&nbsp; SET search_path TO "$user",public,pgroonga,pg_catalog;<br><br>を実行してください。これでそのセッションではPGroongaの@@を優<br>先的に使うようになります。<br><br>セッションだけでなく永続的に設定する場合は次のようにします。<br><br>&nbsp; ALTER DATABASE データベース名 SET search_path TO "$user",public,pgroonga,pg_catalog;<br><br>接続するユーザーが決まっているなら<br><br>&nbsp; ALTER ROLE ユーザー名 SET search_path TO
 "$user",public,pgroonga,pg_catalog;<br><br>でもよいです。<br><br><br>という説明を<br><a href="http://pgroonga.github.io/ja/reference/operators/query.html" target="_blank">http://pgroonga.github.io/ja/reference/operators/query.html</a><br>の「シーケンシャルスキャン」のところに書かないとなぁと思って<br>いるのですがまだ書けていません。。。<br><br>-- <br>須藤 功平 &lt;<a href="mailto:kou****@clear*****" target="_self" ymailto="mailto:kou****@clear*****">kou****@clear*****</a>&gt;<br>株式会社クリアコード &lt;<a href="http://www.clear-code.com/" target="_blank">http://www.clear-code.com/</a>&gt;<br><br>Groongaベースの全文検索システムを総合サポート:<br>&nbsp; <a href="http://groonga.org/ja/support/" target="_blank">http://groonga.org/ja/support/</a><br>パッチ採用 - プログラミングが楽しい人向けの採用プロセス:<br>&nbsp; <a
 href="http://www.clear-code.com/recruitment/" target="_blank">http://www.clear-code.com/recruitment/</a><br>リーダブルコードワークショップ:<br>&nbsp; <a href="http://www.clear-code.com/services/code-reader/readable-code-workshop.html" 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="_self" ymailto="mailto:groon****@lists*****">groon****@lists*****</a><br><a href="http://lists.osdn.me/mailman/listinfo/groonga-dev" target="_blank">http://lists.osdn.me/mailman/listinfo/groonga-dev</a><br><br><br>        </div>    </div>    </blockquote></div>    </div></body></html>