BloGroonga

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でガンガン検索してください!

2018-04-29

Groonga 8.0.2リリース

今月も肉の日がやってきましたので、Groonga 8.0.2をリリースしました!

今回のリリースでは、プログラミングせずにオプション指定だけでトークナイザーとノーマライザーを「定義」できるようになりました。表記揺れの多いソースを検索するのに役立ちます。

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

変更内容

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

  • [logical_range_filter] sort_keys オプションに対応しました。
  • 新しい関数 time_format() を追加しました。strftime と同じ書式で Time 型のカラムの内容を出力できます。
  • [tokenizers] トークナイザー TokenNgram を新たに追加しました。このトークナイザーは動作を動的に定義できます。
  • [normalizers] Unicode 10.0 用の Unicode NFKC に基づくノーマライザー NormalizerNFKC100 を追加しました。
  • [normalizers] ノーマライザーのうち NormalizerNFKC51NormalizerNFKC100 についてオプション指定に対応しました。ノーマライザーの動作を動的に変更できます。
  • [dump][schema] トークナイザーとノーマライザーのオプションの出力に対応しました。この結果、Grooga 8.0.1 およびそれより古いバージョンではGroonga 8.0.2以降のバージョンで出力されたdumpやschemaをインポートできず、対応していない機能である旨のエラーが出力されるようになります。

[logical_range_filter] sort_keys オプションへの対応

logical_range_filtersort_keys に対応しました。これはselectコマンドのsort_keysオプションに相当します。

このオプションは検索対象のシャードが 1 つだけの場合にのみ動作し、複数のシャードを検索対象にする場合は動作しないことに注意して下さい。 詳細はコマンドリファレンスを参照して下さい。

新しい関数 time_format() を追加

Time 型のカラムの出力形式を strftime と同じ書式で指定できるようになりました。

例えば、以下のコマンド列は _key カラムの内容を UNIX 秒表記と人間にも分かりやすい 2018-04-29T10:30:00 のような表記の両方で出力します:

select Timestamps --sortby _id --limit -1 --output_columns '_key, time_format(_key, "%Y-%m-%dT%H:%M:%S")'

[tokenizers] トークナイザー TokenNgram を新たに追加

新しいトークナイザー TokenNgram が追加されました。 このトークナイザーは、オプション指定で動作を動的に定義することができます。 オプションは TokenNgram("[オプション名 1]", [値 1], "[オプション名 2]", [値 2], ...) のような形式で指定します。 例:

table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer 'TokenNgram("n", 2, "loose_symbol", true)' --normalizer NormalizerAuto

[normalizers] 新たなノーマライザー NormalizerNFKC100 の追加

新しいノーマライザー NormalizerNFKC100 が追加されました。 これは Unicode 10.0 用の Unicode NFKC (Normalization Form Compatibility Composition) に基づく正規化を行う物です。

このノーマライザーと NormalizerNFKC51 はオプションの指定に対応しています。 詳細は次項を参照して下さい。

[normalizers] NormalizerNFKC51NormalizerNFKC100 のオプション指定に対応

ノーマライザーのうち NormalizerNFKC51NormalizerNFKC100 について、オプションで細かい挙動を動的に変更できるようになりました。 オプションは NormalizerNFKC100("[オプション名 1]", [値 1], "[オプション名 2]", [値 2], ...) のような形式で指定します。 例:

table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer 'NormalizerNFKC100("unify_kana", true, "unify_kana_case", true)'

[dump][schema] トークナイザーとノーマライザーのオプションの出力に対応

dumpschema の両コマンドで、トークナイザー (TokenNgram) とノーマライザー (NormalizerNFKC51 および NormalizerNFKC100) のオプションの出力に対応しました。 例:

table_create Site TABLE_HASH_KEY ShortText
column_create Site title COLUMN_SCALAR ShortText

table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer "NormalizerNFKC100(\"unify_kana\", true, \"unify_kana_case\", true)"

この変更の結果、これらのオプションの情報を含む dumpschema の結果は、Groonga 8.0.1 およびそれ以前のバージョンではインポートできなくなっています。

オプションが指定されていないトークナイザーやノーマライザーについては出力形式は旧バージョンから変わっていないため、上記のトークナイザーやノーマライザーの新機能を使っている場合にのみ注意が必要です。

さいごに

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

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

2018-03-29

Groonga 8.0.1リリース

今日は肉の日ですね!

Groonga 8.0.1をリリースしました!

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

変更内容

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

  • [ログ] クエリーログ内でfilterの条件を表示するようにしました。
  • Windows版のGroongaにて、*.pdb*.dll*.exeと同じディレクトリにインストールされるようにしました。
  • [logical_count] filteredステージの動的カラムをサポートしました。
  • [logical_count] フィルタータイミングを新規追加しました。
  • [logical_select] フィルタータイミングを新規追加しました。
  • [logical_range_filter] 大きい結果セットに対するウィンドウ関数の動作を最適化しました。
  • [select] --match_escalationパラメーターを追加しました。
  • [httpd] バンドルしているnginxのバージョンを1.13.10に更新しました。
  • 共通接頭辞がどのトークンにもマッチしない時にメモリーリークする問題を修正しました。
  • 同一プロセスで複数のデータベースを開いている時に、異なるデータベースのキャッシュを使用してしまう問題を修正しました。
  • 比較時(>,>=,<,<=,==,!=)に、定数がオーバーフローまたはアンダーフローし得る問題を修正しました。

[ログ] クエリーログ内でfilterの条件を表示するようにしました。

この変更によって、どの条件でfilterされるかがわかるようになります。 具体的には、以下のように表示されます。

2018-02-15 19:04:02.303809|0x7ffd9eedf6f0|:000000013837058 filter(17): product equal "test_product"

上記は、product == "test_product"の条件で17件まで絞り込まれたことを表します。 この機能はデフォルトで無効になっており、以下の環境変数を設定することで有効になります。

GRN_QUERY_LOG_SHOW_CONDITION=yes

[logical_count] filteredステージの動的カラムをサポートしました。

いままで、logical_countでは、initialステージの動的カラムしかサポートしていませんでしたが、filteredステージの動的カラムも使えるようになります。

[logical_count][logical_select] フィルタータイミングを新規追加しました。

filteredステージで生成された動的カラムを使って、フィルター出来るようになります。 具体的には、以下のように使用します。

logical_select \
    --logical_table Entries \
    --shard_key created_at \
    --columns[n_likes_sum_per_tag].stage filtered \
    --columns[n_likes_sum_per_tag].type UInt32 \
    --columns[n_likes_sum_per_tag].value 'window_sum(n_likes)' \
    --columns[n_likes_sum_per_tag].window.group_keys 'tag' \
    --filter 'content @ "system" || content @ "use"' \
    --post_filter 'n_likes_sum_per_tag > 10' \
    --output_columns _key,n_likes,n_likes_sum_per_tag

  # [
  #   [
  #     0, 
  #     1519030779.410312,
  #     0.04758048057556152
  #   ], 
  #   [
  #     [
  #       [
  #         2
  #       ], 
  #       [
  #         [
  #           "_key", 
  #           "ShortText"
  #         ], 
  #         [
  #           "n_likes", 
  #           "UInt32"
  #         ], 
  #         [
  #           "n_likes_sum_per_tag", 
  #           "UInt32"
  #         ]
  #       ]
  #       [
  #         "Groonga", 
  #         10, 
  #         25
  #       ], 
  #       [
  #         "Mroonga", 
  #         15, 
  #         25
  #       ]
  #     ]
  #   ]
  # ]

--post_filter内で、filteredステージで作成した動的カラムn_likes_sum_per_tagを使用しているところがポイントです。 上記の例はlogical_selectですが、logical_countでも同様に使用できます。

[logical_range_filter] 大きい結果セットに対するウィンドウ関数の動作を最適化しました。

一致するレコードが十分見つかった場合は、残りのウィンドウに対してウィンドウ関数を適用しません。

現状では、この最適化は、最適化によるオーバーヘッドが無視出来ない場合、小さな結果セットに対しては、無効になります。

[select] --match_escalationパラメーターを追加しました。

--match_escalation yes とすることによって、マッチ演算のエスカレーションを強制的に有効にします。このパラメータは、 --match_escalation_threshold 99999....999 よりも強力です。--match_escalation yes は、 SOME_CONDITIONS && column @ 'query' もエスカレーションしますが、 --match_escalation_threshold ではしないためです。

デフォルトは、--match_escalation auto です。これは、既存の動作と同じです。

--match_escalation no とすることで、マッチ演算のエスカレーションを無効にできます。これは、 --match_escalation_threshold -1 と同様の動きになります。

共通接頭辞がどのトークンにもマッチしない時にメモリーリークする問題を修正しました。

以下の例のように、Groongaのあいまい検索において、共通の接頭辞がどのトークンにもマッチしない時にメモリーリークしていた問題を修正しました。

table_create Users TABLE_NO_KEY
[[0,0.0,0.0],true]
column_create Users name COLUMN_SCALAR ShortText
[[0,0.0,0.0],true]
table_create Names TABLE_PAT_KEY ShortText
[[0,0.0,0.0],true]
column_create Names user COLUMN_INDEX Users name
[[0,0.0,0.0],true]
load --table Users
[
{"name": "Tom"},
{"name": "Tomy"},
{"name": "Pom"},
{"name": "Tom"}
]
[[0,0.0,0.0],4]
select Users --filter 'fuzzy_search(name, "Atom", {"prefix_length": 1})'   --output_columns 'name, _score'   --match_escalation_threshold -1
[[0,0.0,0.0],[[[0],[["name","ShortText"],["_score","Int32"]]]]]

同一プロセスで複数のデータベースを開いている時に、異なるデータベースのキャッシュを使用してしまう問題を修正しました。

プロセス内でキャッシュを共有していたため、同一のプロセスで複数のデータベースを開いている場合、別のデータベースのキャッシュから結果を返してしまう事がある現象を修正しました。

比較時(>,>=,<,<=,==,!=)に、定数がオーバーフローまたはアンダーフローし得る問題を修正しました。

以下の例のように、比較対象のカラムの型を超える値を指定した場合に、オーバーフローまたは、アンダーフローを起こし、意図しない検索結果が返ってきてしまう現象を修正しました。

table_create Values TABLE_NO_KEY
[[0,0.0,0.0],true]
column_create Values number COLUMN_SCALAR Int16
[[0,0.0,0.0],true]
load --table Values
[
{"number": 3},
{"number": 4},
{"number": -1}
]
[[0,0.0,0.0],3]
select Values   --filter 'number > 32768'   --output_columns 'number'
[[0,1522305525.361629,0.0003235340118408203],[[[3],[["number","Int16"]],[3],[4],[-1]]]]

32768がInt16の範囲(-32,768 ~ 32,767)を超えているため、オーバーフローを起こし、number > 32768number > -32768と評価されていました。 今回の修正で、上記のようにオーバーフローまたは、アンダーフローが起きた場合には、何も結果を返さないように修正しています。

さいごに

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

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

2018-03-08

PostgreSQL用高速日本語全文検索モジュールPGroonga(ぴーじーるんが) 2.0.3リリース

PostgreSQLで高速日本語全文検索をできるようにするPGroongaの2.0.3をリリースしました!

新規ユーザーの方は、PGroonga 2.0.2のリリースアナウンスのPGroongaについても参照してください。

ハイライト

2.0.3でのハイライトは次の通りです。

  • サブSELECTのパフォーマンスが向上

  • text[]の更新パフォーマンスが向上

  • pgroonga_jsonb_full_text_search_ops_v2演算子クラスの追加(JSON内のテキストだけを検索する場合はjsonb型のデフォルトの演算子クラスよりも高速)

  • WAL関連の機能強化

  • オンラインバックアップの実現を支援する機能を追加

  • timestamp (without time zone)型のインデックスの修正
    • アップグレード後にインデックスの再作成が必要
  • pgroonga_text_array_full_text_search_ops_v2演算子クラスの修正
    • アップグレード後にインデックスの再作成が必要

アップグレード

以前のバージョンと互換性があるので互換性がある場合の手順でアップグレードできます。

ただし、以下のPGroongaのインデックスはアップグレード後に再作成する必要があるので注意してください。

  • timestamp (without time zone)型のカラムのインデックス

  • pgroonga_text_array_full_text_search_ops_v2演算子クラスを使っているインデックス

    • この演算子クラスはtext[]型のデフォルトの演算子クラスなので演算子クラスを指定していない場合は対象になります。

インデックスの再作成にはREINDEXが便利です。

REINDEX INDEX インデックス名;

機能強化

今回のリリースでの機能強化の詳細はリリースノート内のリンクを参照してください。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PGroongaの新しいリリースを紹介しました。運用面で便利な機能が増えています。

ここで紹介したもの以外の変更点はリリースノートを参照してください。

PostgreSQLで高速に日本語全文検索をしたいという方はPGroongaを使ってガンガン検索してください!

2018-02-09

Groonga 8.0.0リリース

今日は肉の日ですね!

Groonga 8.0.0をリリースしました!

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、安心してアップグレードしてください!

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

変更内容

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

  • select --drilldown_adjuster--drilldowns[LABEL].adjusterをサポートしました。

  • between between()の引数に境界値を指定しなくても動作するようにしました。

  • ハッシュテーブルのメモリリークを修正しました。

select --drilldown_adjuster--drilldowns[LABEL].adjusterを追加しました

selectの引数に--drilldown_adjuster--drilldowns[LABEL].adjusterを追加しました。 drilldown結果に対して、--adjusterと同様スコアの調整ができます。

以下のように使用します。

table_create Categories TABLE_PAT_KEY ShortText

table_create Tags TABLE_PAT_KEY ShortText
column_create Tags categories COLUMN_VECTOR|WITH_WEIGHT Categories

table_create Memos TABLE_HASH_KEY ShortText
column_create Memos tags COLUMN_VECTOR Tags

column_create Categories tags_categories COLUMN_INDEX|WITH_WEIGHT \
  Tags categories

load --table Tags
[
{"_key": "groonga", "categories": {"full-text-search": 100}},
{"_key": "mroonga", "categories": {"mysql": 100, "full-text-search": 80}},
{"_key": "ruby", "categories": {"language": 100}}
]

load --table Memos
[
{
  "_key": "Groonga is fast",
  "tags": ["groonga"]
},
{
  "_key": "Mroonga is also fast",
  "tags": ["mroonga", "groonga"]
},
{
  "_key": "Ruby is an object oriented script language",
  "tags": ["ruby"]
}
]

select Memos \
  --limit 0 \
  --output_columns _id \
  --drilldown tags \
  --drilldown_adjuster 'categories @ "full-text-search" * 2 + categories @ "mysql"' \
  --drilldown_output_columns _key,_nsubrecs,_score
[
  [
    0,
    0.0,
    0.0
  ],
  [
    [
      [
        3
      ],
      [
        [
          "_id",
          "UInt32"
        ]
      ]
    ],
    [
      [
        3
      ],
      [
        [
          "_key",
          "ShortText"
        ],
        [
          "_nsubrecs",
          "Int32"
        ],
        [
          "_score",
          "Int32"
        ]
      ],
      [
        "groonga",
        2,
        203
      ],
      [
        "mroonga",
        1,
        265
      ],
      [
        "ruby",
        1,
        0
      ]
    ]
  ]
]

上記の例では、categoriesfull-text-searchmysqlを持つレコードのスコアを調整しています。

between between()の引数に境界値を指定しなくても動作するようにしました

between()は、最小値、最大値を含む/含まないを指定する引数を含めて5つの引数が必要でしたが、 今回のリリースから、最小値、最大値を含む/含まないを指定しなくても使えるようになりました。

以下のように3つの引数で使うことができます。 3つの引数で使用した場合は、最小値、最大値を含むものとして処理されます。

table_create Users TABLE_HASH_KEY ShortText
column_create Users age COLUMN_SCALAR Int32

table_create Ages TABLE_PAT_KEY Int32
column_create Ages users_age COLUMN_INDEX Users age

load --table Users
[
{"_key": "alice",  "age": 17},
{"_key": "bob",    "age": 18},
{"_key": "calros", "age": 19},
{"_key": "dave",   "age": 20},
{"_key": "eric",   "age": 21}
]

select Users --filter 'between(age, 18, 20)'
[
  [
    0,
    0.0,
    0.0
  ],
  [
    [
      [
        3
      ],
      [
        [
          "_id",
          "UInt32"
        ],
        [
          "_key",
          "ShortText"
        ],
        [
          "age",
          "Int32"
        ]
      ],
      [
        2,
        "bob",
        18
      ],
      [
        3,
        "calros",
        19
      ],
      [
        4,
        "dave",
        20
      ]
    ]
  ]
]

ハッシュテーブルのメモリリークを修正しました

この修正により、Windowsにおいて、クエリーを実行し続けるだけで、Groongaに接続できなくなることがある現象を解消しています。

さいごに

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

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

2018-01-29

Groonga 7.1.1リリース

今日は肉の日ですね!

Groonga 7.1.1をリリースしました!

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

変更内容

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

  • Quorum matchをサポートしました。filterquery両方で使えます。

  • filter で類似度のしきい値を指定できるよう改良しました。

  • grndb recover--force-lock-clearオプションを追加しました。

  • サロゲートペアをload できるように改良しました。

  • expireの実施回数を減らす環境変数GRN_II_REDUCE_EXPIRE_ENABLEを追加しました。

  • logical_range_filterpost_flterオプションを追加しました。

Quorum matchをサポートしました。filterquery両方で使えます

Quorum matchは、曖昧検索をする際に使用します。設定したしきい値を超える数のトークンが存在するレコードにマッチします。 例えば、"I have a pen"が"I"、"have"、"a"、"pen"の4つのトークンに分割されるとすると、これらのトークンのうちいずれか3つ以上のトークンを持つレコードが マッチします。

以下のように使用します。

--filter column *Q${THRESHOLD} "I have a pen"

--query *Q${THRESHOLD}"I have a pen"

filter で類似度のしきい値を指定できるよう改良しました

以下のように類似度のしきい値をカスタマイズして、類似文章検索が出来るようになります。 類似文章検索は、以下の例で言うと、"document"と似たようなレコードを検索する機能です。

--filter column *S${SIMILARITY_THRESHOLD} "document"

grndb recover--force-lock-clearオプションを追加しました

通常テーブルにロックが残留していた場合は安全に復旧できないため、自動復旧できませんが、このオプションを使用することでテーブルにロックが残留していても、grndb recoverを実行することができます。 強制的に復旧するので、安全に復旧することはできません。 おいおい問題が発生したとしても、すぐにデータベースを操作したい場合に使うことを想定しています。

以下のように使用します。

 % grndb recover --force-lock-clear DB_PATH

サロゲートペアをloadできるように改良しました

loadコマンドで入力するJSON内にサロゲートペアの文字を使用できます。 以下のように4byteのUnicode文字列を "\uD83C\uDF7A" の形式で扱えるようになります。

たとえば 🍺 (0xF0 0x9F 0x8D 0xBA) を \uD83C\uDF7A と記述できます。

expireの実施回数を減らす環境変数GRN_II_REDUCE_EXPIRE_ENABLEを追加しました

GRN_II_REDUCE_EXPIRE_ENABLE=no は無効になり、GRN_II_REDUCE_EXPIRE_ENABLE はデフォルトで有効になります。

logical_range_filterpost_flterオプションを追加しました。

filtered ステージで生成されるカラムに対して、さらにfilterを実行できます。

さいごに

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

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