Mroongaブログ

2013-03-29

mroonga 3.02リリース

mroonga 3.02 をリリースしました!

インストール/アップグレード方法

それぞれの環境毎のインストール方法: インストール

以前のバージョンからアップグレードする場合には、アップグレード手順に注意が必要です。現在お使いのバージョンごとのアップグレード手順を参照してください。

1.20より前のバージョンからアップグレードする場合は 1.20リリース 2012/01/29 にある手順を使ってください。

1.20からアップグレードする場合は 2.00リリース 2012/02/29 にある手順を使ってください。

2.00か2.01からアップグレードする場合は、 2.02リリース 2012/04/29 にある手順でパッケージ署名用の新しい鍵をインポートしてください。

2.00以降でストレージモードにてマルチカラムインデックスを使っている場合は 2.02リリース 2012/04/29 にある手順でインデックスを作り直してください。

2.04以降でストレージモードにてSETカラムもしくは要素数が256より少ないENUMを使用している場合は、 2.05リリース 2012/07/29 にある手順でデータベースを再作成してください。

2.05以降でマルチカラムインデックスをVARCHARやCHAR型に対して使っている場合は、 2.08リリース 2012/10/29 にある手順でインデックスを再作成してください。

2.08以降でTIMESTAMP型のカラムを使っているテーブルがあれば、データベースを再作成してください。CHAR(N)を主キーとしているテーブルがあれば、インデックスを再作成してください。手順は 2.09リリース 2012/11/29 にあります。

今回のリリースの主なトピックは以下の通りです。

  • MariaDB 10.0のサポート
  • mroonga_commandのサポート

MariaDB 10.0のサポート

以前からMariaDBへの対応をすすめていましたが、今回のリリースではMariaDB 10.0のサポートを追加しました。

ただし、MariaDB+mroongaのパッケージは提供しないので、MariaDBと一緒に使うにはソースコードからビルドする必要があります。

具体的なビルド手順については MariaDBにバンドルしたソースコードからのインストール で案内しています。

mroonga_commandのサポート(実験的)

今回のリリースでは実験的ではありますが、 mroonga_command というUDFのサポートを追加しました。

これは、mroongaからgroongaに直接クエリを投げることができるようにするものです。

たとえば、groongaが提供している位置情報検索のための関数を直接呼べるようになります。

以下はサンプルで使うスキーマ定義です。

  CREATE TABLE shops (
  id int primary key auto_increment,
  name text,
  location GEOMETRY NOT NULL,
  SPATIAL INDEX(location)
  ) engine = mroonga, default charset utf8;

これに以下のようにして店舗のデータを投入します。

  INSERT INTO shops (name, location) VALUES ("Shop A", GeomFromText('POINT(139.796829 35.712013)'));
  INSERT INTO shops (name, location) VALUES ("Shop B", GeomFromText('POINT(139.711517 35.647701)'));

データを投入できたことを以下のようにして確認します。 確認自体に mroonga_command を使うことができます。

  SELECT mroonga_command("select shops");

結果は以下のようになります。(結果は適宜整形しています) データを2件登録できていることがわかります。

  [
    [
      [2],
      [
        ["_id","UInt32"],
        ["_key","Int32"],
        ["id","Int32"],
        ["location","WGS84GeoPoint"],
        ["name","LongText"]
      ],
      [1,1,1,"128563247x503268584","Shop A"],
      [2,2,2,"128331724x502961461","Shop B"]
    ]
  ]

では、groongaが提供している位置情報検索のための関数を使ってみましょう。 groongaでは指定した円の範囲内に含まれている座標を持つレコードの検索のために geo_in_circle が用意されています。

今回はこれを使って特定の駅から500メートル以内の店舗を探してみます。

  SELECT mroonga_command("select shops --filter 'geo_in_circle(location, "35.7119,139.7983", 500)'");

上記のクエリは引数に渡している座標位置からから半径500メートル以内にある店舗のみを抽出(--filter)することができます。結果を見てみましょう。

  [
    [
      [1],
      [
        ["_id","UInt32"],["_key","Int32"],["id","Int32"],["location","WGS84GeoPoint"],["name","LongText"]
      ],
      [1,1,1,"128563247x503268584","Shop A"]
    ]
  ]

上記の結果から500メートル以内にある店舗は1件あって、なおかつ店名はShop Aであることがわかりました。

mroonga_command はこんなふうに使うことができます。

ただし、 mroonga_command は通常のSQLとは実行の枠組みが異なる独自拡張なので使用の際には注意が必要です。

さいごに

3.01からの詳細な変更点は 3.02リリース 2013/03/29 を確認してください。

それでは、mroongaでガンガン検索してください!