タグ別アーカイブ: groonga

初めての groonga – SQL と比較する


会社で groonga を使うことになりました。 groonga でないと取得できないデータがあったんです。

groonga も含め 全文検索エンジンを使うのは初めてだったので、 公式ドキュメントを見ながら探っていきました。 データベースで使用する SQL と groonga のクエリを比較してみると次のようになりました。 もともと別物なので参考程度に見ていただければと思います。

SELECT

データを取得するときは、 Database でも groonga でも SELECT を使います。 でも、構文の構成はだいぶ違います。 groonga では、次のような命令になります。

簡単に比較すると次の表のようになります。

Database groonga
表示カラム (select の後ろに羅列) ––output_columns
テーブル from ––table
検索条件 where ––filter, ––query, ––match_column, ––scorer
順序指定 order by ––sortby
オフセット offset ––offset
件数指定 limit ––limit
グループ化 group by ––drilldown (drilldown したときの件数指定などは下の説明を参照)
論理演算子 and, or &&, ||

補足説明

––output_columns

検索結果に表示するカラムを指定する。カンマで区切ることにより、複数カラムを指定できる。

––query

全文検索を行う。

title カラムについて 文字列 “this” の全文検索を行う。

––match_columns, ––query

検索結果に含めるカラムを指定する。複数指定もできる。

––query と一緒に使い、 title カラムについて 文字列 “this” の全文検索を行う。

––filter

条件を指定する。 javascript など のように、 “==”, “<=“, “>” などを使うことができる。 AND, OR は &&, || で表現できる。

––drilldown

バージョン4.0.1 の資料を見るかぎり、 drilldown に指定したそれぞれのカラムについてグループ化した結果が表示される。 column_1 と column_2 を指定していれば、 column_1 だけでグループ化した結果と、 column_2 でグループ化した結果が続けて表示される。 ORDER BY column_1, column_2 のようなことはできない。

drilldown の結果に対する件数指定(オフセットなど)は下記のように、 通常の ––sortby, ––offset, ––limit の頭に drilldown をつけて指定する。 drilldown した結果だけがほしければ、 ––limit0 を指定して出てくる通常カラムを制限する。

特殊カラム

カラム名 説明
_id 検索時に groonga が割り当てるID。
_key 主キーを格納するカラム。
_score (Oracle DB でいう ROWNUM のような) 検索結果に含まれる仮想カラム。全文検索の条件に合致するレコードほど高い数値が入る。
_nsubrecs drilldown を使った場合に、 drilldown した結果件数が格納されるカラム。 SELECT COUNT(1) FROM … に似ている。