立川弘明
stand****@gmail*****
2015年 10月 15日 (木) 16:51:10 JST
須藤様 立川です。 > それはよかったです。 > もし、都内にいて、ピンときているか確認した方がよさそうであれ > ば、「Groongaで学ぶ全文検索 2015-10-16」にお越しください。 > https://groonga.doorkeeper.jp/events/32517 > > きっとピンとくると思います。 ありがとうございます。 検討させていただきます。 > LIKEでもインデックスが効くと便利かと思ったので↓も動くように > しておきました。 > > * 前方一致: content LIKE 'postgresql%' > * 後方一致: content LIKE '%postgresql' > * 部分一致: content LIKE '%postgresql%' > * 完全一致: content LIKE 'postgresql' > > もしかしたらこっちの方が使いやすいかもしれません。 素晴らしい実装をありがとうございます。 既存コードの修正箇所を抑えられそうなのでこちらの 書き方でいきたいと思います。 試しに約50万件のデータを投入し、検索結果、検索速度を 確認させていただきましたがどちらも期待した通りの結果となりました。 2015年10月14日 18:38 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <CAG72S9LxA-=LuS_KGjcx001cm_EgN=jAZEOD13=RMnii****@mail*****> > "[groonga-dev,03567] Re: 検索方法について" on Wed, 14 Oct 2015 15:59:43 +0900, > 立川弘明 <stand****@gmail*****> wrote: > >>> * 検索対象のテキストに対して前方一致検索 >>> >>> ではなく、 >>> >>> * トークンに対して前方一致検索 >> >> なるほど、そういうことだったのですね。 >> ドキュメントも合わせて読ませていただき、大まかですが理解できました。 >> (ピンときているかはわかりませんが・・・) > > それはよかったです。 > もし、都内にいて、ピンときているか確認した方がよさそうであれ > ば、「Groongaで学ぶ全文検索 2015-10-16」にお越しください。 > https://groonga.doorkeeper.jp/events/32517 > > きっとピンとくると思います。 > > >> 前方一致の意味として、PGroonga(Groonga)の全文検索の場合は >> トークン単位で考えるよう切り替える必要があるということですね。 > > はい、そうです。 > > 全文検索用ではないインデックスのときはテキスト全体で考えてよ > い↓のですが、全文検索の場合はトークン単位です。 > https://github.com/pgroonga/pgroonga#%E6%96%87%E5%AD%97%E5%88%97%E5%9E%8B > >>> 次のように「Postgr」と「Postgr*」では違いがでます。 >> >> こちらの例もとても納得できました。ありがとうございます。 >> ちなみにトークナイザにTokenBigramSplitSymbolAlphaを指定すれば「Postgr」でも >> ヒットするようになると思っているのですが合っていますでしょうか。 > > はい、あっています。 > >>> それであれば正規表現ベースのトークナイザーを使うとよいです。 >>> と思ったんですが、正規表現を使える機能は無効にしていたんでし >>> た。。。 >>> >>> ちなみに、大文字と小文字は無視して検索でもよいですか? >> >> はい、大丈夫です。 >> 現在でも区別しておりません。 >> >> >>> であれば、「@~」という演算子を追加して正規表現ベースのトーク >>> ナイザーを使えるようにします。それを使うと次のように条件を書 >>> けるようになります。 >>> >>> * 前方一致: content @~ '\Apostgresql' >>> * 後方一致: content @~ 'postgresql\z' >>> * 部分一致: content @~ 'postgresql' >>> * 完全一致: content @~ '\Apostgresql\z' >> >> ありがとうございます。 >> ぜひ使ってみたいです。 >> が、お手数をおかけしてしまいなんだか恐縮です・・・。 > > であれば、↓を試してみてもらえますか? > ↑が使えるようになっています。 > > http://packages.groonga.org/tmp/postgresql94-pgroonga-1.0.0-1.el7.centos.x86_64.rpm > > ↑をインストールした後、ALTER EXTENSION pgroonga UPDATEする > とアップグレードできます。 > > インデックスを作るときは↓のようにオペレータークラスとして > pgroonga.text_regexp_opsを指定してください。 > > CREATE INDEX grnindex ON memos USING pgroonga (content pgroonga.text_regexp_ops); > > ↓のコミットの中にあるテストがクエリー例になっているので、参 > 考にしてください。 > > https://github.com/pgroonga/pgroonga/commit/d0b2d675e0a8c570a83484977bd7cf77fa8fc60a > > > 注意点は次の通りです。 > > * 検索文字列(「\Apostgresql」でいうと「postgresql」の部分) > は小文字にしてください。 > * http://groonga.org/ja/docs/reference/regular_expression.html#escape > にある特殊文字はエスケープしてください。 > > LIKEでもインデックスが効くと便利かと思ったので↓も動くように > しておきました。 > > * 前方一致: content LIKE 'postgresql%' > * 後方一致: content LIKE '%postgresql' > * 部分一致: content LIKE '%postgresql%' > * 完全一致: content LIKE 'postgresql' > > もしかしたらこっちの方が使いやすいかもしれません。 > > -- > 須藤 功平 <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/ > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.osdn.me/mailman/listinfo/groonga-dev