BloGroonga

2019-02-09

Groonga 9.0.0リリース

Groonga 9.0.0をリリースしました! メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく9.0.0へアップグレードできます。

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

変更内容

主な変更点は以下の通りです。

  • Tokenizers 新しいトークナイザー TokenPattern を追加しました。

  • Tokenizers 新しいトークナイザー TokenTable を追加しました。

  • select インデックスカラムに対する類似文書検索をサポートしました。

  • Normalizers NormalizerNFKC100 に新しいオプション remove_blank を追加しました。

  • groonga実行ファイル ログ内のThread IDの表示を改善しました。

Tokenizers 新しいトークナイザー TokenPattern を追加しました。

以下のように正規表現を使ってトークンを抽出できます。 このトークナイザーは、正規表現にマッチしたトークンのみを抽出します。

正規表現は複数指定することもできます。

tokenize 'TokenPattern("pattern", "\\\\d+円", "pattern", "りんご|みかん")' "私は100円のりんごと50円のみかんを129円で買いました。"
[
  [
    0,
    0.0,
    0.0
  ],
  [
    {
      "value": "100円",
      "position": 0,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "りんご",
      "position": 1,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "50円",
      "position": 2,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "みかん",
      "position": 3,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "129円",
      "position": 4,
      "force_prefix": false,
      "force_prefix_search": false
    }
  ]
]

Tokenizers 新しいトークナイザー TokenTable を追加しました。

以下のように、既に存在するテーブルのキーを使ってトークンを抽出できます。

table_create Keywords TABLE_PAT_KEY ShortText --normalizer NormalizerNFKC100
load --table Keywords
[
{"_key": "100円"},
{"_key": "りんご"},
{"_key": "29円"}
]
tokenize 'TokenTable("table", "Keywords")' "私は100円のりんごを29円で買いました。"
[
  [
    0,
    0.0,
    0.0
  ],
  [
    {
      "value": "100円",
      "position": 0,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "りんご",
      "position": 1,
      "force_prefix": false,
      "force_prefix_search": false
    },
    {
      "value": "29円",
      "position": 2,
      "force_prefix": false,
      "force_prefix_search": false
    }
  ]
]

select インデックスカラムに対する類似文書検索をサポートしました。

マルチカラムインデックスを使っている場合、この機能を使って全てのソースカラムに対して類似文書検索ができます。

table_create Documents TABLE_HASH_KEY ShortText
column_create Documents content1 COLUMN_SCALAR Text
column_create Documents content2 COLUMN_SCALAR Text
table_create Terms TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
column_create Terms document_index COLUMN_INDEX|WITH_POSITION|WITH_SECTION Documents content1,content2
load --table Documents
[
["_key", "content1"],
["groonga の概要", "groonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。"],
["全文検索と即時更新", "一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。"],
["カラムストアと集計クエリ", "現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。"]
]
load --table Documents
[
["_key", "content2"],
["転置索引とトークナイザ", "転置索引は大規模な全文検索に用いられる伝統的なデータ構造です"],
["共有可能なストレージと参照ロックフリー", "CPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのクエリを複数のスレッドで実行したりすることの重要性はますます高まっています。"],
["位置情報(緯度・経度)検索", "GPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になっています。"],
["groonga ライブラリ", "Groonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。"],
["groonga サーバ", "groonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。"],
["groonga ストレージエンジン", "groonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。"]
]
select Documents --filter 'Terms.document_index *S "MySQLで全文検索"' --output_columns '_key, _score, content1, content2'
[
  [
    0,
    1549608674.553312,
    0.0007221698760986328
  ],
  [
    [
      [
        3
      ],
      [
        [
          "_key",
          "ShortText"
        ],
        [
          "_score",
          "Int32"
        ],
        [
          "content1",
          "Text"
        ],
        [
          "content2",
          "Text"
        ]
      ],
      [
        "groonga の概要",
        419432,
        "groonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。",
        ""
      ],
      [
        "全文検索と即時更新",
        209716,
        "一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。",
        ""
      ],
      [
        "転置索引とトークナイザ",
        209716,
        "",
        "転置索引は大規模な全文検索に用いられる伝統的なデータ構造です"
      ]
    ]
  ]
]

Normalizers NormalizerNFKC100 に新しいオプション remove_blank を追加しました。

このオプションは、以下のように、空白を取り除きます。

normalize 'NormalizerNFKC100("remove_blank", true)' "This is a pen."
[
  [
    0,
    1549528178.608151,
    0.0002171993255615234
  ],
  {
    "normalized": "thisisapen.",
    "types": [
    ],
    "checks": [
    ]
  }
]

groonga実行ファイル ログ内のThread IDの表示を改善しました。

Windows版にて、Process ID とThread ID が区別しにくかったため、どちらが、Thread ID またはProcess ID なのかを明確にしました。

  • (Before): |2436|1032:
    • 2436 がProcess IDです。 1032 がThread IDです。
  • (After): |2436|00001032:
    • 2436 がProcess IDです。 00001032 がThread IDです。

さいごに

8.1.1からの詳細な変更点は9.0.0リリース 2019-02-09を確認してください。

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