年の瀬ですね。こんにちは。堀本です。今年最後のリリースです。
Groonga 11.1.1 をリリースしました!
https://groonga.org/ja/docs/news.html#release-11-1-1
変更点一覧:
https://groonga.org/ja/blog/2021/12/29/groonga-11.1.1.html
## 主な変更内容
### 改良
* [select] 組み合わせフレーズ近傍検索をサポートしました。
この機能は、 '*NP"..." OR *NP"..." OR ...' の短縮形です。
例えば、以下のように、 query を使って *NP を複数実行する式のかわりに *NPP を使えます。
query ("title * 10 || content",
"*NP"a 1 x" OR
*NP"a 1 y" OR
*NP"a 1 z" OR
*NP"a 2 x" OR
*NP"a 2 y" OR
*NP"a 2 z" OR
*NP"a 3 x" OR
*NP"a 3 y" OR
*NP"a 3 z" OR
*NP"b 1 x" OR
*NP"b 1 y" OR
*NP"b 1 z" OR
*NP"b 2 x" OR
*NP"b 2 y" OR
*NP"b 2 z" OR
*NP"b 3 x" OR
*NP"b 3 y" OR
*NP"b 3 z"")
この機能によって、上記の式を *NPP"(a b) (1 2 3) (x y z)" と書くことができます。
加えて、 *NPP"(a b) (1 2 3) (x y z)" は、 '*NP"..." OR *NP"..." OR ...' より高速です。
query ("title * 10 || content",
"*NPP"(a b) (1 2 3) (x y z)"")
この機能は、 '*NP"..." OR *NP"..." OR ...' のような近傍フレーズ検索のパフォーマンスを改善するために実装されました。
* [select] 順序付き組み合わせフレーズ近傍検索をサポートしました。
この機能は、 '*ONP"..." OR *ONP"..." OR ...' の短縮形です。
例えば、以下のように、 query を使って *ONP を複数実行する式のかわりに *ONPP を使えます。
query ("title * 10 || content",
"*ONP"a 1 x" OR
*ONP"a 1 y" OR
*ONP"a 1 z" OR
*ONP"a 2 x" OR
*ONP"a 2 y" OR
*ONP"a 2 z" OR
*ONP"a 3 x" OR
*ONP"a 3 y" OR
*ONP"a 3 z" OR
*ONP"b 1 x" OR
*ONP"b 1 y" OR
*ONP"b 1 z" OR
*ONP"b 2 x" OR
*ONP"b 2 y" OR
*ONP"b 2 z" OR
*ONP"b 3 x" OR
*ONP"b 3 y" OR
*ONP"b 3 z"")
この機能によって、上記の式を *ONPP"(a b) (1 2 3) (x y z)" と書くことができます。
加えて、 *ONPP"(a b) (1 2 3) (x y z)" は、 '*ONP"..." OR *ONP"..." OR ...' より高速です。
query ("title * 10 || content",
"*ONPP"(a b) (1 2 3) (x y z)"")
この機能は '*ONP"..." OR *ONP"..." OR ...' のような順序付き近傍フレーズ検索のパフォーマンスを改善するために実装されました。
* [request_cancel] 検索実行中に request_cancel を検知しやすくしました。
request_cancel を検知するために、リターンコードのチェックを増やしたためです。
* [thread_dump] 新しいコマンド thread_dump を追加しました。
現状、このコマンドはWindowsでしか動作しません。
このコマンド実行時の全てのスレッドのバックトレースをNOTICEレベルのログとして出力できます。
この機能は、Groongaが応答を返さない等の問題を解決するのに役立ちます。
* [CentOS] CentOS 8のサポートをやめました。
CentOS 8は、2021年12月31日でEOLとなるためです。
### 修正
* 無効なパラメータを持つインデックスカラムを削除できない問題を修正しました。
例えば、以下のように column_create を使って無効なインデックスカラムを作成した時、テーブルが削除できなくなります。
table_create Statuses TABLE_NO_KEY
column_create Statuses start_time COLUMN_SCALAR UInt16
column_create Statuses end_time COLUMN_SCALAR UInt16
table_create Times TABLE_PAT_KEY UInt16
column_create Times statuses COLUMN_INDEX Statuses start_time,end_time
[
[
-22,
1639037503.16114,
0.003981828689575195,
"grn_obj_set_info(): GRN_INFO_SOURCE: multi column index must be created with WITH_SECTION flag: <Times.statuses>",
[
[
"grn_obj_set_info_source_validate",
"../../groonga/lib/db.c",
9605
],
[
"/tmp/d.grn",
6,
"column_create Times statuses COLUMN_INDEX Statuses start_time,end_time"
]
]
],
false
]
table_remove Times
[
[
-22,
1639037503.16515,
0.0005414485931396484,
"[object][remove] column is broken: <Times.statuses>",
[
[
"remove_columns",
"../../groonga/lib/db.c",
10649
],
[
"/tmp/d.grn",
8,
"table_remove Times"
]
]
],
false
]
### 既知の問題
* 現在Groongaには、ベクターカラムに対してデータを大量に追加、削除、更新した際にデータが破損することがある問題があります。
* *< と *> は、filter条件の右辺に query() を使う時のみ有効です。もし、以下のように指定した場合、
*< と *> は && として機能します。
* 'content @ "Groonga" *< content @ "Mroonga"'
* GRN_II_CURSOR_SET_MIN_ENABLE が原因でマッチするはずのレコードを返さないことがあります。