Groonga 11.0.4リリース
Groonga 11.0.4をリリースしました!
それぞれの環境毎のインストール方法: インストール
変更内容
主な変更点は以下の通りです。
改良
-
[Normalizer] カスタマイズされたノーマライザーを使えるようになりました。
-
新しいコマンド
object_warm
を追加しました。このコマンドは、GroongaのDBをOSのページキャッシュに乗せます。 OS起動後、Groongaを一度も起動していない場合、GroongaのDBはOSのページキャッシュ上に存在しません。 そのため、Groongaに対する最初の操作は遅くなります。
予めこのコマンドを実行した場合、Groongaへの最初の操作は速くなります。 Linuxでは、
cat *.db > dev/null
で同等のことができますが、Windowsでは、いままで同様のことはできませんでした。このコマンドを使うことで、LinuxでもWindowsでもGroongaのDBをOSのページキャッシュへ乗せることができます。 また、テーブル、カラム、インデックス単位でも同様のことができます。 したがって、よく使うテーブルやカラム、インデックスのみをOSのページキャッシュに乗せることができます。
-
select
--filter
内で特定のレコードのスコアーを調整できるようにしました。*~
という演算子を使うことで、特定のレコードのスコアーを調整できます。*~
は&&
や||
と同じ論理演算子です。したがって、&&
や||
と同じように使えます。*~
のデフォルトの重みは-1
です。したがって、例えば、
'content @ "Groonga" *~ content @ "Mroonga"'
は以下の操作を意味します。'content @ "Groonga"
とcontent @ "MySQL"
にマッチしたレコードを抽出します。- 以下のようにスコアーを追加します。
a. 'content @ "Groonga"' のスコアーを計算します。 b. 'content @ "Mroonga"' のスコアーを計算します。 c. bのスコアーを -1 倍します。 d. このレコードのスコアーは a + b です。したがって、 aのスコアー 1 で bのスコアーが1 の場合、 このレコードのスコアーは 1 + (1 * -1) = 0 です。
また、
*~${score_quantity}
とすることで、スコアーの量を指定できます。具体的には、 以下の条件(
'content @ "Groonga" *~2.5 content @ "MySQL"'
) にマッチしたレコードのスコアーを調整します。table_create Memos TABLE_NO_KEY column_create Memos content COLUMN_SCALAR ShortText table_create Terms TABLE_PAT_KEY ShortText \ --default_tokenizer TokenBigram \ --normalizer NormalizerAuto column_create Terms index COLUMN_INDEX|WITH_POSITION Memos content load --table Memos [ {"content": "Groonga is a full text search engine."}, {"content": "Rroonga is the Ruby bindings of Groonga."}, {"content": "Mroonga is a MySQL storage engine based of Groonga."} ] select Memos \ --command_version 3 \ --filter 'content @ "Groonga" *~2.5 content @ "Mroonga"' \ --output_columns 'content, _score' \ --sort_keys -_score,_id { "header": { "return_code": 0, "start_time": 1624605205.641078, "elapsed_time": 0.002965450286865234 }, "body": { "n_hits": 3, "columns": [ { "name": "content", "type": "ShortText" }, { "name": "_score", "type": "Float" } ], "records": [ [ "Groonga is a full text search engine.", 1.0 ], [ "Rroonga is the Ruby bindings of Groonga.", 1.0 ], [ "Mroonga is a MySQL storage engine based of Groonga.", -1.5 ] ] } }
adjuster を使っても同様のことができます。 adjuster を使う場合、アプリケーション上で、
--filter
条件と--adjuster
条件を作る必要がありますが、この改良で、--filter
条件のみを作成すればよくなりました。以下のように、
query()
を使って、filter条件を記述することもできます。--filter 'content @ "Groonga" *~2.5 content @ "Mroonga"'
-
select 重み付き
&&
をサポートしました。*<
と*>
を使うことで、重み付きの&&
を使えます。*<
のデフォルトの重みは 0.5です。*>
のデフォルトの重みは 2.0 です。*<${score_quantity}
や*>${score_quantity}
とすることで、スコアーの量を指定できます。 また、*<${score_quantity}
と指定した場合は、${score_quantity}
の正負の符号が反転します。例えば、
'content @ "Groonga" *<2.5 query("content", "MySQL")'
は以下の操作を意味します。'content @ "Groonga"
とcontent @ "MySQL"
にマッチしたレコードを抽出します。- 以下のようにスコアーを追加します。
a. 'content @ "Groonga"' のスコアーを計算します。 b. 'query("content", "MySQL") のスコアーを計算します。 c. bのスコアーは、 *< によって -2.5倍されます。 d. このレコードのスコアーは a + b です。したがって、 aのスコアー 1 で bのスコアーが1 の場合、 このレコードのスコアーは 1 + (1 * -2.5) = −1.5 です。
具体的には、 以下の条件(
'content @ "Groonga" *~2.5 query("content", "MySQL")'
) にマッチしたレコードのスコアーを調整します。table_create Memos TABLE_NO_KEY column_create Memos content COLUMN_SCALAR ShortText table_create Terms TABLE_PAT_KEY ShortText \ --default_tokenizer TokenBigram \ --normalizer NormalizerAuto column_create Terms index COLUMN_INDEX|WITH_POSITION Memos content load --table Memos [ {"content": "Groonga is a full text search engine."}, {"content": "Rroonga is the Ruby bindings of Groonga."}, {"content": "Mroonga is a MySQL storage engine based of Groonga."} ] select Memos \ --command_version 3 \ --filter 'content @ "Groonga" *<2.5 query("content", "Mroonga")' \ --output_columns 'content, _score' \ --sort_keys -_score,_id { "header": { "return_code": 0, "start_time": 1624605205.641078, "elapsed_time": 0.002965450286865234 }, "body": { "n_hits": 3, "columns": [ { "name": "content", "type": "ShortText" }, { "name": "_score", "type": "Float" } ], "records": [ [ "Groonga is a full text search engine.", 1.0 ], [ "Rroonga is the Ruby bindings of Groonga.", 1.0 ], [ "Mroonga is a MySQL storage engine based of Groonga.", -1.5 ] ] } }
-
Log 標準出力、標準エラー出力への出力をサポートしました。
プロセスログ と クエリーログ が標準出力と標準エラー出力への出力をサポートしました。
--log-path -
や--query-log-path -
と指定した場合、Groongaはログを標準出力に出力します。--log-path +
や--query-log-path +
と指定した場合、Groongaはログを標準エラー出力に出力します。
プロセスログ は、Groongaの動作全てに関することのログです。 クエリーログ は、クエリー処理に関することだけのログです。
この機能はDocker上でGroongaを実行する際に有用です。 Dockerは標準で標準出力と標準エラー出力を記録する機能を持っています。したがって、Groongaのログを取得するために、 Dockerの環境にログインする必要がなくなります。
-
[ドキュメント]
string_substring
に不足している内容を追加しました。
既知の問題
-
現在Groongaには、ベクターカラムに対してデータを大量に追加、削除、更新した際にデータが破損することがある問題があります。
-
[ブラウザーベースの管理ツール] 現在Groongaには、レコード一覧の管理モードのチェックボックスにチェックを入れても、 非管理モードに入力された検索クエリーが送信されるという問題があります。
-
*<
と*>
は、filter条件の右辺にquery()
を使う時のみ有効です。もし、以下のように指定した場合、*<
と*>
は&&
として機能します。'content @ "Groonga" *< content @ "Mroonga"'
さいごに
詳細については、以下のお知らせも参照してください。
それでは、Groongaでガンガン検索してください!