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

