立川弘明
stand****@gmail*****
2015年 10月 19日 (月) 11:25:51 JST
須藤様 立川です。 > 注意点なのですが、シーケンシャルスキャンになったときは大文字 > 小文字を区別を検索する「普通のLIKE」と同じ動作になることに注 > 意してください。 > (インデックスを使ったときは大文字小文字を区別しません。) 盲点でした・・・。 http://groonga.org/ja/docs/reference/regular_expression.html の「Groongaは正規表現検索にインデックスを使わないときは・・・groonga は Groonga にも groonga にも両方にマッチします。」の一文が頭にあり、検索文字列を 小文字に寄せていれば大丈夫と思っていたのですが、よく考えればPGroongaではなく groongaのドキュメントでした・・・。 全ての検索条件においてインデックスを使用することは難しそうなので、小文字に 寄せた文字列を格納するカラムを追加し、そのカラムを検索対象とする形で考えています。 2015年10月15日 21:39 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <CAG72S9+hcyeURVVA-qTxDwtxtCFNwEPewkre5M-=3rpna****@mail*****> > "[groonga-dev,03569] Re: 検索方法について" on Thu, 15 Oct 2015 16:51:10 +0900, > 立川弘明 <stand****@gmail*****> wrote: > >>> LIKEでもインデックスが効くと便利かと思ったので↓も動くように >>> しておきました。 >>> >>> * 前方一致: content LIKE 'postgresql%' >>> * 後方一致: content LIKE '%postgresql' >>> * 部分一致: content LIKE '%postgresql%' >>> * 完全一致: content LIKE 'postgresql' >>> >>> もしかしたらこっちの方が使いやすいかもしれません。 >> >> 素晴らしい実装をありがとうございます。 >> 既存コードの修正箇所を抑えられそうなのでこちらの >> 書き方でいきたいと思います。 >> >> 試しに約50万件のデータを投入し、検索結果、検索速度を >> 確認させていただきましたがどちらも期待した通りの結果となりました。 > > それはよかったです。 > > 注意点なのですが、シーケンシャルスキャンになったときは大文字 > 小文字を区別を検索する「普通のLIKE」と同じ動作になることに注 > 意してください。 > (インデックスを使ったときは大文字小文字を区別しません。) > > LIKEではなくILIKEで使えるようにすればシーケンシャルスキャン > でも大文字小文字を区別しなくなるのですが、それでも挙動は完全 > に同じにならないのでよく使われているLIKEで動くようにしていま > す。 > > > どういうときにシーケンシャルスキャンになるかというと、たとえ > ば、レコード数が少ないときです。 > > あとは、LIMITがかかっているときは使うことがあるかもしれませ > ん。ヒット数が多くてLIMITが小さいときはインデックスを使わな > い方が速いからです。ただ、PGroongaはあんまりマジメにコスト情 > 報をPostgreSQLに返していないので、そこらへんがうまく効くかは > わかりません。 > > 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