2.3. 高度な検索

groongaは、JavaScriptに似た文法での条件絞込や、計算した値を用いたソート、ドリルダウン検索、位置情報(緯度・経度)を用いた絞込・ソートを行うことができます。

2.3.1. JavaScriptに似た文法での絞込・全文検索

selectコマンドのfilterパラメータは、queryパラメータと同様に、レコードの検索条件を指定します。filterパラメータとqueryパラメータが異なる点は、filterパラメータには、JavaScriptの式に似た文法で条件を指定する点です。

実行例

> select --table Site --filter "_id <= 1" --output_columns _id,_key
[[0,1268381229.56842,0.000219],[[[2],[["_id","UInt32"],["_key","ShortText"]],[1,"http://example.org/"]]]]

ここで、filterパラメータには

_id <= 1

という条件を指定しています。この場合は_idの値が1以下のレコードが検索結果として得られます。

queryパラメータとfilterパラメータを同時に指定すると、両者の条件をともに満たすレコードが結果として返ります。

2.3.2. scorerの利用

selectコマンドのscorerパラメータは、 全文検索を行った結果の各レコードに対して処理を行うためのパラメータです。

filterパラメータと同様に、 JavaScriptの式に似たな文法で様々な条件を指定することができます。

実行例

> select --table Site --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
[[0,1268381229.56842,0.000219],[[[2],[["_id","UInt32"],["_key","ShortText"],["_score","Int32"]],[2,"http://example.net/",846930886],[1,"http://example.org/",1804289383]]]]
> select --table Site --scorer "_score = rand()" --output_columns _id,_key,_score --sortby _score
[[0,1268381300.12763,0.000164],[[[2],[["_id","UInt32"],["_key","ShortText"],["_score","Int32"]],[1,"http://example.org/",1681692777],[2,"http://example.net/",1714636915]]]]

検索結果には、’_score’というなめの、全文検索のスコアが代入されている仮想的なカラムが付与されることをチュートリアル中ソートの項目で説明しました。

上記の実行例では、scorerパラメータに

_score = rand()

という条件を指定しています。ここでは、rand()という乱数を返す関数を用いて、全文検索のスコアを乱数で上書きしています。

sortbyパラメータには、

_score

を指定しています。これは、スコア順に昇順にソートすることを意味しています。

よって、上記のクエリは実行されるたびに検索結果の並び順がランダムに変わります。

2.3.3. ドリルダウン

執筆中です。

2.3.4. 位置情報の利用

filterパラメータにおいて、 geo_in_circle / geo_in_rectangle の両関数を用いることができます。それぞれ、指定されたカラムに保存された位置情報が、あるポイントから円の範囲、矩形の範囲に存在するかどうかを返す関数です。この関数を用いることにより、位置情報での検索が可能となります。

位置情報を保存するためのカラムの型として、TokyoGeoPoint/WGS84GeoPointの2つの型があります。前者は日本測地系、後者は世界測地系(WGS84相当)の経緯度を保存します。

scorerパラメータにおいて、:doc:../functions/geo_distance 関数を用いることにより、2点間の距離を計算することができます。

2.3.5. マルチカラム検索

執筆中です。