Posts

Showing posts from August, 2014

ActiveGroongaを使ってみる (1)

今関わっている某プロジェクトでGroongaを採用したいと思って、色々と読んだりいじったりしています。Railsアプリケーションに組み込みたいと思っているので、ActiveGroongaを使うのがよさそうだと思って試し始めたのですが、リファレンスがまだComing soonでわからないところがたくさんあったりするので、コードを読みながらちまちまと進めていることをまとめておくことにしました。この検証では Rails 4.1.5 を使っています。別バージョンだとこの方法では動かないかもしれませんのであしからず。今回はインストール〜モデル生成まで書いています。インストール設定データベース作成モデル作成 インストールまずはgroongaパッケージをインストールします。ちなみに、パッケージを入れなくてもActiveGroonga gemをインストールした時にソースからビルドしてくれるようですが、結構時間がかかるみたいです(参考: rroongaを最速でインストールするには)。パッケージをインストールしたらGemfileに以下を追加して bundle install します。gem "activegroonga", require:"active_groonga"設定config/groonga.yml にデータベース格納先を指定します。例えば下記のような感じ。2014/9/2 追記
コメントいただきました。自分で作らなくても、後述の bin/rake groonga:create 時に自動的にこのファイルができました。自動生成だとDBのパスが db/groonga/#{RAILS_ENV}/db になるので、パスを変えたい時は自分でこのファイルを用意する、という使い方をすればいいようです。development: database: "db/groonga/development/db"次に config/application.rb で ActiveGroonga の railtie を require します。require "rails/all" の下に下記の行を追加しました。require"active_groonga/railtie"データベース作成ActiveG…

Groongaドキュメント読書会#4参加レポート

2014/8/25に開催されたGroongaドキュメント読書会#4の参加レポートです。
今回初めて参加させていただきました。
読書会で学んだことのうち、ドキュメントに記載されていないことを中心にまとめています。
4.4.1. JavaScriptに似た文法での絞込・全文検索ドキュメント
queryとfilterは書き方の違いだけなのか?
書き方の違いだけで、処理的には同じ。filterの方が表現力が高い。 4.4.2. scorer を利用したソートドキュメント
–filter “1”
全てのレコードにマッチさせる、という意味。–filterすると結果として仮想テーブル的なものができる。仮想テーブル的なものに_scoreがついてるイメージ。–scorer “_score = rand()”
ランダム値を_scoreに代入。–scorerを使うと元々あるカラム(_score以外のカラム)の値を変えることもできてしまうが、基本的には_scoreの値を調整することを意図した機能。selectの結果で返されるデータの中で、最初の値が三つ入っている配列は何?
第一要素: 結果ステータス (0 = 正常終了)第二要素: クエリの実行を開始した時間第三要素: 開始したのにかかった時間 4.4.3. 位置情報を用いた絞込・ソートドキュメント
緯度、経度の区切り文字にはカンマも使える。距離計算や円の中にあるかどうか、矩形の中にあるかどうかなどが関数で計算できる。球面を考慮して計算するモードや平面と見なして計算するモードがある。Groongaは内部表現はできるだけ整数にしている(計算誤差を減らすため)。度数表記は60進数なので60をかけてミリ秒表記に変換できる。ミリ秒表記のデータをもっているならそのまま使った方がいい。 4.5. ドリルダウンドキュメント
ドリルダウンとはRDBのGROUP BYのような処理ができる機能。サンプルコードで指定している–limit 0とは?
出力件数を0にしている。drilldownは普通のセレクト結果+drilldown結果を返す。この例ではselectの出力は余計なので–limit 0で抑制している。_nsubrecsはエヌサブレックスと読む。Groongaは複数のGROUP BYを一回でできる = 効率よくクエリを実行できる。drilldown対象のカラ…