BloGroonga

2018-09-29

Groonga 8.0.7リリース

肉の日ですね。Groonga 8.0.7をリリースしました!

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

変更内容

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

  • トークナイザーのTokenMecabに新しいオプションを追加しました。
  • トークナイザーのTokenNgramに新しいオプションを追加しました。
  • 複数のディレクトリからのプラグインの検出に対応しました。

トークナイザーのTokenMecabに新しいオプションを追加しました

TokenMecabに以下のオプションが加わりました。

  • include_class: MeCabのメタ情報のうち classsubclass を出力します。
  • include_reading: MeCabのメタ情報のうち reading を出力します。
  • include_form: MeCabのメタ情報のうち inflected_typeinflected_form、および base_form を出力します。
  • use_reading: かな表記の読みがなによる単語の検索を可能にします。 このオプションは表記揺れのかなでの検索に役立ちます。

詳細はリファレンスを併せて参照して下さい。

トークナイザーのTokenNgramに新しいオプションを追加しました

TokenNgramに以下のオプションが加わりました。

  • unify_alphabet: TokenNgram("unify_alphabet", false)TokenBigramSplitAlpha と同様に働きます。
  • unify_symbol: TokenNgram("unify_symbol", false)TokenBigramSplitSymbol と同様に働きます。
  • unify_digit: TokenNgram("unify_digit", false)TokenBigramSplitDigit と同様に働きます。

詳細はリファレンスを併せて参照して下さい。

複数のディレクトリからのプラグインの検出に対応しました

複数のディレクトリからプラグインを認識するために、新しい環境変数 GRN_PLUGINS_PATH での指定を受け付けるようにしました。 値はディレクトリへのパスのリストで、;区切り(Windows)または:区切り(それ以外のプラットフォーム)です。

GRN_PLUGINS_PATH は既存の GRN_PLUGINS_DIR よりも優先的に認識されます。

この機能は現在の所Windowsでは利用できません。

さいごに

8.0.6からの詳細な変更点は8.0.7リリース 2018-09-29を確認してください。

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

2018-08-29

Groonga 8.0.6リリース

肉の日ですね。Groonga 8.0.6をリリースしました!

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

変更内容

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

  • オプティマイザが組み込みの機能になりました。
  • 充分に少ない結果に対して、既定の状態でシーケンシャルサーチを行うようになりました。
  • load コマンドに lock_table オプションを追加しました。

オプティマイザが組み込みの機能になりました

従来プラグインとして提供されていたオプティマイザが、組み込みの機能になりました。 この機能は初期状態で無効化されており、有効化するには環境変数 GRN_EXPR_OPTIMIZE=yes をセットする(または従来通り expression_rewriters プラグインを読み込む)必要があります。

充分に少ない結果に対して、既定の状態でシーケンシャルサーチを行うようになりました

充分に絞り込まれた後の検索結果に対して、シーケンシャルサーチを行うようになりました。 全ての結果のうちの1%で1000レコード未満まで絞り込まれた状態では、通常のインデックス検索よりもシーケンシャルサーチの方が高速です。

この機能は環境変数 GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.0 をセットする事により無効化できます。

load コマンドに lock_table オプションを追加しました

load --lock_table yesというコマンド列によって、カラムの更新と --each の適用の間、テーブルをロックできるようになりました。 これは loaddelete の衝突の防止に役立ちますが、ロード性能を低下させるでしょう。

さいごに

8.0.5からの詳細な変更点は8.0.6リリース 2018-08-29を確認してください。

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

2018-07-29

Groonga 8.0.5リリース

肉の日ですね。Groonga 8.0.5をリリースしました!

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

変更内容

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

time_classify_day_of_week()関数を追加

各検索結果の日時情報について、曜日の情報を取得するための機能が追加されました。 新しい関数 time_classify_day_of_week()time 型の値を唯一の引数として受け付け、その日時の曜日を返します。 返される値は UInt8 型で、0 は日曜日を、6 は土曜日を表します。

この関数を使う前には、最初に以下のようなコマンドで functions/time プラグインを登録する必要があります:

plugin_register functions/time

time_format_iso8601()関数を追加`

time 型の値をISO 8601形式で整形した結果を取得する機能が追加されました。 新しい関数 time_format_iso8601()time 型の値を唯一の引数として受け付け、その日時を 2018-07-29T23:59:59.999999+09:00 のようなISO 8601形式の文字列にして返します。

前項と同様、この関数を使うためには functions/time プラグインを登録する必要があります。

古いバージョンのUbuntuとDebianのサポートを廃止

ご存じの通り、Ubuntu 17.10 (Artful Aardvark) と Debian jessie は現在どちらもサポート期間が終了しています。 Groonga 8.0.5 およびこれ以降のバージョンは、これらの古いバージョンの環境向けにはリリースされませんのでご注意下さい。

さいごに

8.0.4からの詳細な変更点は8.0.5リリース 2018-07-29を確認してください。

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

2018-06-29

Groonga 8.0.4リリース

肉の日ですね。Groonga 8.0.4をリリースしました!

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

変更内容

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

column_create時のバリデーションを追加

column_createコマンドで全文検索インデックスを作成する際、カラムの型とフラグの組み合わせによっては有用な動作をしないため、それらの組み合わせを指定ミスとみなしてバリデーションエラーとするようにしました。 以下のケースがバリデーションエラーになります。

  • ベクターカラムの全文検索インデックスに WITH_SECTION フラグが指定されていないケース
  • ベクターカラムの全文検索インデックスに複数のカラムが指定されてマルチカラムインデックスになっているケース
    • 片方のカラムの更新時に、もう片方のカラムのインデックスが予期せず消えてしまうためです。この問題が解決されれば、このバリデーションは解除するかもしれません。
    • 詳細: groonga/groonga@08e2456 (英語)

vector_find関数を追加

vector_find関数を追加しました。この関数を使うと、ベクターカラムから指定した条件にマッチする要素を取り出すことができます。詳細はドキュメントをご覧ください。

7.15.29. vector_find — Groonga v8.0.4ドキュメント

今後のDebian jessie対応状況について

Updated Debian 8: 8.11 releasedにて既報の通り、Debian jessieの最後のポイントリリースがアナウンスされました。 そのため、GroongaのDebian jessie向けのパッケージの提供もそれにあわせて今回で終了します。来月からは、Debian向けにはstretchのみを対象としたパッケージの提供を行います。

Debian jessieでGroongaをお使いの方は、stretchへのアップグレードをおすすめします。

さいごに

8.0.3からの詳細な変更点は8.0.4リリース 2018-06-29を確認してください。

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

2018-05-29

Groonga 8.0.3リリース

肉の日ですね。Groonga 8.0.3をリリースしました!

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

変更内容

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

  • [highlight_html] NormalizerNFKC100 または TokenNgram を使って検索した結果のハイライトをサポートしました。
  • [normalizers] NormalizerNFKC100 に新しいオプション unify_middle_dot option を追加しました。
  • [normalizers] NormalizerNFKC100 に新しいオプション unify_katakana_v_sounds option を追加しました。
  • [normalizers] NormalizerNFKC100 に新しいオプション unify_katakana_bu_sound option を追加しました。
  • [sub_filter] 十分にフィルターされたケースの sub_filter の動作を最適化しました。
  • [delete] 新しいオプション limit を追加しました。
  • [normalizers] U+FF21 FULLWIDTH LATIN CAPITAL LETTER A のような全角ラテン大文字が、U+0061 LATIN SMALL LETTER A のようなラテン小文字に正規化 されない不具合を修正しました。 すでに、NormalizerNFKC100 を使用している場合は、インデックスを再生成する必要があります。

[highlight_html] NormalizerNFKC100 または TokenNgram を使って検索した結果のハイライトをサポートしました。

以下の例のように、NormalizerNFKC100 または TokenNgram を使った検索のキーワードをハイライト出来ます。

table_create Entries TABLE_NO_KEY
column_create Entries body COLUMN_SCALAR ShortText
table_create Terms TABLE_PAT_KEY ShortText   --default_tokenizer 'TokenNgram("report_source_location", true)'   --normalizer 'NormalizerNFKC100'
column_create Terms document_index COLUMN_INDEX|WITH_POSITION Entries body
load --table Entries
[
{"body": "ア㌕Az"}
]
[[0,0.0,0.0],1]
select Entries   --match_columns body   --query 'グラム'   --output_columns 'highlight_html(body, Terms)'
[
  [
    0,
    0.0,
    0.0
  ],
  [
    [
      [
        1
      ],
      [
        [
          "highlight_html",
          null
        ]
      ],
      [
        "ア<span class=\"keyword\">㌕</span>Az"
      ]
    ]
  ]
]

[normalizers] NormalizerNFKC100 に新しいオプション unify_middle_dot option を追加しました。

このオプションは以下の例のように、中点を正規化します。

normalize   'NormalizerNFKC100("unify_middle_dot", true)'   "·ᐧ•∙⋅⸱・・"   WITH_TYPES
[
  [
    0,
    0.0,
    0.0
  ],
  {
    "normalized": "········",
    "types": [
      "symbol",
      "symbol",
      "symbol",
      "symbol",
      "symbol",
      "symbol",
      "symbol",
      "symbol"
    ],
    "checks": [

    ]
  }
]

このオプションによって、 の有無や 位置にかかわらず検索できます。

[normalizers] NormalizerNFKC100 に新しいオプション unify_katakana_v_sounds option を追加しました。

このオプションは、以下の例のように ヴァヴィヴヴェヴォバビブベボ へ正規化します。

normalize   'NormalizerNFKC100("unify_katakana_v_sounds", true)'   "ヴァヴィヴヴェヴォヴ"   WITH_TYPES
[
  [
    0,
    0.0,
    0.0
  ],
  {
    "normalized": "バビブベボブ",
    "types": [
      "katakana",
      "katakana",
      "katakana",
      "katakana",
      "katakana",
      "katakana"
    ],
    "checks": [

    ]
  }
]

例えば バイオリンヴァイオリン で検索できます。

[normalizers] NormalizerNFKC100 に新しいオプション unify_katakana_bu_sound option を追加しました。

このオプションは、以下の例のように ヴァヴィヴゥヴェヴォ に正規化します。

normalize   'NormalizerNFKC100("unify_katakana_bu_sound", true)'   "ヴァヴィヴヴェヴォヴ"   WITH_TYPES
[
  [
    0,
    0.0,
    0.0
  ],
  {
    "normalized": "ブブブブブブ",
    "types": [
      "katakana",
      "katakana",
      "katakana",
      "katakana",
      "katakana",
      "katakana"
    ],
    "checks": [

    ]
  }
]

例えば、セーブルセーヴルセーヴェル で検索できます。

[sub_filter] 十分にフィルターされたケースの sub_filter の動作を最適化しました。

この最適化は、例えば、以下のように sub_filter 実行前に十分にレコードが絞り込まれているケースで 有効になります。

table_create Files TABLE_PAT_KEY ShortText
column_create Files revision COLUMN_SCALAR UInt32

table_create Packages TABLE_PAT_KEY ShortText
column_create Packages files COLUMN_VECTOR Files

column_create Files packages_files_index COLUMN_INDEX Packages files

table_create Revisions TABLE_PAT_KEY UInt32
column_create Revisions files_revision COLUMN_INDEX Files revision

load --table Files
[
{"_key": "include/groonga.h", "revision": 100},
{"_key": "src/groonga.c",     "revision": 29},
{"_key": "lib/groonga.rb",    "revision": 12},
{"_key": "README.textile",    "revision": 24},
{"_key": "ha_mroonga.cc",     "revision": 40},
{"_key": "ha_mroonga.hpp",    "revision": 6}
]

load --table Packages
[
{"_key": "groonga", "files": ["include/groonga.h", "src/groonga.c"]},
{"_key": "rroonga", "files": ["lib/groonga.rb", "README.textile"]},
{"_key": "mroonga", "files": ["ha_mroonga.cc", "ha_mroonga.hpp"]}
]

select Packages \
  --filter '_key == "rroonga" && \
            sub_filter(files, "revision >= 10 && revision < 40")' \
  --output_columns '_key, files, files.revision'

[delete] 新しいオプション limit を追加しました。

以下の例のように、このオプションを使って、削除するレコードの件数を制限できます。

table_create Users TABLE_PAT_KEY ShortText
[[0,0.0,0.0],true]
load --table Users
[
{"_key": "alice"},
{"_key": "bob"},
{"_key": "bill"},
{"_key": "brian"}
]
[[0,0.0,0.0],4]
delete --table Users --filter '_key @^ "b"' --limit 2
[[0,0.0,0.0],true]
#>delete --filter "_key @^ \"b\"" --limit "2" --table "Users"
#:000000000000000 filter(3)
#:000000000000000 delete(2): [0][2]
#<000000000000000 rc=0
select Users
[
  [
    0,
    0.0,
    0.0
  ],
  [
    [
      [
        2
      ],
      [
        [
          "_id",
          "UInt32"
        ],
        [
          "_key",
          "ShortText"
        ]
      ],
      [
        1,
        "alice"
      ],
      [
        3,
        "bill"
      ]
    ]
  ]
]

さいごに

8.0.2からの詳細な変更点は8.0.3リリース 2018-05-29を確認してください。

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