Groonga 12.0.3リリース
Groonga 12.0.3をリリースしました!
それぞれの環境毎のインストール方法: インストール
変更内容
主な変更点は以下の通りです。
改良
-
logical_count
logical_count
実行中のメモリー使用量を改善しました。いままで、Groongaは
logical_count
実行中に確保したオブジェクト(オブジェクトとは、テーブルやカラム、インデックスなどです。)と一時テーブルをlogical_count
の実行完了まで保持し続けていました。この機能によって、Groongaは、1つのシャードを処理した後すぐに参照を減らします。 そのため、Groongaは、
logical_count
の実行中にメモリーを解放できるようになり、Groongaのメモリー使用量を削減できることがあります。この機能は参照カウントモードのときのみ有効です。
GRN_ENABLE_REFERENCE_COUNT=yes
と設定することで、参照カウントモードを有効にできます。加えて、Groongaは、この機能によって
logical_count
実行中に一時テーブルを動的に解放します。 そのため、Groongaのメモリー使用量を削減できます。この改善は、参照カウントモードが有効でなくても効果があります。 -
dump
MISSING_IGNORE/MISSING_NIL
をサポートしました。MISSING_IGNORE/MISSING_NIL
を持つカラムがある場合、これらのカラムのダンプに失敗していました。このリリースから、dump
コマンドはこれらのカラムをサポートしました。 -
snippet,snippet_html 入力としてベクターをサポートしました。
例えば、以下のようにJSONデータ内のベクターに対して検索キーワードの周辺テキストを抽出できます。
table_create Entries TABLE_NO_KEY column_create Entries title COLUMN_SCALAR ShortText column_create Entries contents COLUMN_VECTOR ShortText table_create Tokens TABLE_PAT_KEY ShortText --default_tokenizer TokenNgram --normalizer NormalizerNFKC130 column_create Tokens entries_title COLUMN_INDEX|WITH_POSITION Entries title column_create Tokens entries_contents COLUMN_INDEX|WITH_SECTION|WITH_POSITION Entries contents load --table Entries [ { "title": "Groonga and MySQL", "contents": [ "Groonga is a full text search engine", "MySQL is a RDBMS", "Mroonga is a MySQL storage engine based on Groonga" ] } ] select Entries\ --output_columns 'snippet_html(contents), contents'\ --match_columns 'title'\ --query Groonga [ [ 0, 0.0, 0.0 ], [ [ [ 1 ], [ [ "snippet_html", null ], [ "contents", "ShortText" ] ], [ [ "<span class=\"keyword\">Groonga</span> is a full text search engine", "Mroonga is a MySQL storage engine based on <span class=\"keyword\">Groonga</span>" ], [ "Groonga is a full text search engine", "MySQL is a RDBMS", "Mroonga is a MySQL storage engine based on Groonga" ] ] ] ] ]
今までも、
--output_columns 'snippet_html(contents[1])'
のようにsnippet*
を指定することで以下のようにベクターに対して検索キーワードの周辺テキストを抽出できますが、この方法ではどの要素を出力すればよいかわかりません。どの要素が検索にヒットしたかわからないためです。select Entries\ --output_columns 'snippet_html(contents[0]), contents'\ --match_columns 'title'\ --query Groonga [ [ 0, 0.0, 0.0 ], [ [ [ 1 ], [ [ "snippet_html", null ], [ "contents", "ShortText" ] ], [ [ "<span class=\"keyword\">Groonga</span> is a full text search engine" ], [ "Groonga is a full text search engine", "MySQL is a RDBMS", "Mroonga is a MySQL storage engine based on Groonga" ] ] ] ] ]
-
[
vector_join
] 新しい関数vector_join()
を追加しました。この関数は各要素を結合します。この関数の第二引数で区切り文字を指定できます。 例えば、以下のようにベクターに対して
snippet()
やsnippet_html()
を実行できます。plugin_register functions/vector table_create Entries TABLE_NO_KEY column_create Entries title COLUMN_SCALAR ShortText column_create Entries contents COLUMN_VECTOR ShortText table_create Tokens TABLE_PAT_KEY ShortText --default_tokenizer TokenNgram --normalizer NormalizerNFKC130 column_create Tokens entries_title COLUMN_INDEX|WITH_POSITION Entries title column_create Tokens entries_contents COLUMN_INDEX|WITH_SECTION|WITH_POSITION Entries contents load --table Entries [ { "title": "Groonga and MySQL", "contents": [ "Groonga is a full text search engine", "MySQL is a RDBMS", "Mroonga is a MySQL storage engine based on Groonga" ] } ] select Entries\ --output_columns 'snippet_html(vector_join(contents, "\n")), contents'\ --match_columns 'title'\ --query Groonga --output_pretty yes [ [ 0, 1650849001.524027, 0.0003361701965332031 ], [ [ [ 1 ], [ [ "snippet_html", null ], [ "contents", "ShortText" ] ], [ [ "<span class=\"keyword\">Groonga</span> is a full text search engine\nMySQL is a RDBMS\nMroonga is a MySQL storage engine based on <span class=\"keyword\">Groonga</span>" ], [ "Groonga is a full text search engine","MySQL is a RDBMS","Mroonga is a MySQL storage engine based on Groonga" ] ] ] ] ]
-
インデックス構築 動的インデックス構築のようにとても大きなトークンを無視するようにしました。
Groongaはエラーを発生しなくなり、静的インデックス構築を実行する時に大きなトークンを無視し警告を出力します。
修正
-
パトリシアトライのテーブルにキーを追加できなくなることがある問題を修正しました。
この問題は、以下の条件で発生します。
- パトリシアトライのテーブルにすでにキーがある場合。
- 4096バイトのキーを追加する場合。
既知の問題
-
現在Groongaには、ベクターカラムに対してデータを大量に追加、削除、更新した際にデータが破損することがある問題があります。
-
*<
と*>
は、filter条件の右辺にquery()
を使う時のみ有効です。もし、以下のように指定した場合、*<
と*>
は&&
として機能します。'content @ "Groonga" *< content @ "Mroonga"'
-
GRN_II_CURSOR_SET_MIN_ENABLE
が原因でマッチするはずのレコードを返さないことがあります。
さいごに
詳細については、以下のお知らせも参照してください。
それでは、Groongaでガンガン検索してください!