Groonga 10.0.3リリース
Groonga 10.0.3をリリースしました!
それぞれの環境毎のインストール方法: インストール
変更内容
主な変更点は以下の通りです。
-
予めトークナイズされたデータから転置インデックスを構築できるようになりました。
-
select 関数の引数に
vectorを指定できるようになりました。 -
select 動的カラムに新しいステージ
result_setを追加しました。-
このステージは、結果セットのテーブルにカラムを作ります。したがって、
queryかfilterが存在しない場合は作られません。queryやfilterが存在しない場合は、結果セットのテーブルが作られないためです。
-
このステージでは
_valueは使用できません。result_setステージの値はscore_columnに格納されます。
-
-
[vector_slice] 重み付きベクターの重みに
Float32型が使えるようになりました。 -
select
drilldownsの動的カラムのステージにfilteredとoutputを追加しました。drilldowns[Label].stage filteredやdrilldowns[Label].stage outputのようにdrilldownsの動的カラムのステージにfilteredとoutputを使えます。
-
select ドリルダウンでの集計に
Float型の値をサポートしました。MAX、MIN、SUMを使ってFloat型の値の最大値、最小値、合計値を集計できます。
-
query、geo_in_rectangle、geo_in_circle
query()とgeo_in_rectangle()とgeo_in_circle()に新しいオプションscore_columnを追加しました。 -
[Windows] クラッシュしていないくてもエラー時にはバックトレースが出力されるようになりました。
-
[Windows] 古いWindowsのサポートをやめました。
- 10.0.3から、Windows 8 (Windows Server 2012) 以降を要求します。
-
select 参照可能なソートキーとそうでないソートキーが混在しているときのソートパフォーマンスを改善しました。
-
select 全てのソートキーが参照可能なキーの時のソートのパフォーマンスを改善しました。
-
select
_socre = column1*X + column2*Y + ...の場合のスコアラーのパフォーマンスを改善しました。-
この最適化は、
_score内に多くの+または*がある場合に効きます。 -
現状、
+と*に対してのみ効果があります。
-
-
select フレーズ近傍検索をサポートしました。
-
[ベクターカラム] 重み付きベクターの重みに
float32型を追加しました。 -
複数のスレッドから、同時にモジュール(トークナイザー、ノーマライザー、トークンフィルター)が使われた場合にクラッシュする問題を修正しました。
-
Float32の値を表示する際の精度を修正しました。- 10.0.3から
Float32の値の精度は、 8桁から7桁になります。
- 10.0.3から
-
動的カラムのパラメーターだけが違うクエリーが実行された時にGroongaが誤ったキャッシュを使用していた問題を修正しました。
予めトークナイズされたデータから転置インデックスを構築できるようになりました。
-
これにより、インデックスの構築が高速化します。
-
この改善を使うには、トークンカラムを準備する必要があります。
-
トークンカラムは、インデックスカラムのように自動で値が生成されます。
-
トークンカラムの値はソースカラムの値をトークナイズすることで生成されます。
-
トークンカラムは以下のようにソースカラムを設定することで作成できます。
table_create Terms TABLE_PAT_KEY ShortText \ --normalizer NormalizerNFKC121 \ --default_tokenizer TokenNgram table_create Notes TABLE_NO_KEY column_create Notes title COLUMN_SCALAR Text # The last "title" is the source column. column_create Notes title_terms COLUMN_VECTOR Terms title
select 関数の引数に vector を指定できるようになりました。
-
例えば、 query の flags オプションを vector を使って以下のように記述できます。
select \ --table Memos \ --filter 'query("content", "-content:@mroonga", \ { \ "expander": "QueryExpanderTSV", \ "flags": ["ALLOW_LEADING_NOT", "ALLOW_COLUMN"] \ })'
query、geo_in_rectangle、geo_in_circle query() と geo_in_rectangle() と geo_in_circle() に新しいオプション score_column を追加しました。
-
score_columnを使うことで条件毎にスコアの値を格納できます。 -
通常、Groongaは、全ての条件のスコアーを加算してスコアーを計算しますが、条件毎にスコアーの値を取得したいこともあります。
-
例えば以下のように、中心座標にどれだけ近いかをスコアーとして使いたい場合に
score_columnが使えます。table_create LandMarks TABLE_NO_KEY column_create LandMarks name COLUMN_SCALAR ShortText column_create LandMarks category COLUMN_SCALAR ShortText column_create LandMarks point COLUMN_SCALAR WGS84GeoPoint table_create Points TABLE_PAT_KEY WGS84GeoPoint column_create Points land_mark_index COLUMN_INDEX LandMarks point load --table LandMarks [ {"name": "Aries" , "category": "Tower" , "point": "11x11"}, {"name": "Taurus" , "category": "Lighthouse", "point": "9x10" }, {"name": "Gemini" , "category": "Lighthouse", "point": "8x8" }, {"name": "Cancer" , "category": "Tower" , "point": "12x12"}, {"name": "Leo" , "category": "Tower" , "point": "11x13"}, {"name": "Virgo" , "category": "Temple" , "point": "22x10"}, {"name": "Libra" , "category": "Tower" , "point": "14x14"}, {"name": "Scorpio" , "category": "Temple" , "point": "21x9" }, {"name": "Sagittarius", "category": "Temple" , "point": "43x12"}, {"name": "Capricorn" , "category": "Tower" , "point": "33x12"}, {"name": "Aquarius" , "category": "mountain" , "point": "55x11"}, {"name": "Pisces" , "category": "Tower" , "point": "9x9" }, {"name": "Ophiuchus" , "category": "mountain" , "point": "21x21"} ] select LandMarks \ --sort_keys 'distance' \ --columns[distance].stage initial \ --columns[distance].type Float \ --columns[distance].flags COLUMN_SCALAR \ --columns[distance].value 0.0 \ --output_columns 'name, category, point, distance, _score' \ --limit -1 \ --filter 'geo_in_circle(point, "11x11", "11x1", {"score_column": distance}) && category == "Tower"' [ [ 0, 1590647445.406149, 0.0002503395080566406 ], [ [ [ 5 ], [ [ "name", "ShortText" ], [ "category","ShortText" ], [ "point", "WGS84GeoPoint" ], [ "distance", "Float" ], [ "_score", "Int32" ] ], [ "Aries", "Tower", "11x11", 0.0, 1 ], [ "Cancer", "Tower", "12x12", 0.0435875803232193, 1 ], [ "Leo", "Tower", "11x13", 0.06164214760065079, 1 ], [ "Pisces", "Tower", "9x9", 0.0871751606464386, 1 ], [ "Libra", "Tower", "14x14", 0.1307627409696579, 1 ] ] ] ] -
上記の例では、
_scoreによるソートは意味をなしません。category == "Tower"によって、_scoreの値は全て1になるためです。 しかし、socre_columnを使うことで、中心座標からの距離でソートできます。
select 参照可能なソートキーとそうでないソートキーが混在しているときのソートパフォーマンスを改善しました。
-
参照可能なソートキーとそうでないソートキーが混在していて、参照可能なキーが2つ以上あるときのソートパフォーマンスを改善しました。
-
参照可能なソートキーとは以下のソートキー以外のことです。
- 圧縮されたカラム
- ドリルダウンのキーに複数の値が指定されているドリルダウンの値を格納する
_value ShortText型のキーを持たないパトリシアトライテーブルの_key_score
-
文字列以外のソートキーが多いほど、ソートに使用するメモリ使用量が少なくなります。
select フレーズ近傍検索をサポートしました。
-
フレーズ単位で近傍検索できます。
- フレーズ近傍検索のクエリー構文は、
*NP"Phrase1 phrase2 ..."です。 - フレーズ近傍検索のスクリプト構文は、
column *NP "phrase1 phrase2 ..."です。 -
検索対象のフレーズにスペースを含む場合、 以下のようにフレーズを
"で囲うことで検索できます。table_create Entries TABLE_NO_KEY column_create Entries content COLUMN_SCALAR Text table_create Terms TABLE_PAT_KEY ShortText \ --default_tokenizer 'TokenNgram("unify_alphabet", false, \ "unify_digit", false)' \ --normalizer NormalizerNFKC121 column_create Terms entries_content COLUMN_INDEX|WITH_POSITION Entries content load --table Entries [ {"content": "I started to use Groonga. It's very fast!"}, {"content": "I also started to use Groonga. It's also very fast! Really fast!"} ] select Entries --filter 'content *NP "\\"I started\\" \\"use Groonga\\""' --output_columns 'content' [ [ 0, 1590469700.715882, 0.03997230529785156 ], [ [ [ 1 ], [ [ "content", "Text" ] ], [ "I started to use Groonga. It's very fast!" ] ] ] ]
- フレーズ近傍検索のクエリー構文は、
[ベクターカラム] 重み付きベクターの重みに float32 型を追加しました。
-
uint32の代わりにfloat32として重みを格納できます。 -
この機能を使うには、
column_create実行時にWEIGHT_FLOAT32フラグを追加する必要があります。column_create Records tags COLUMN_VECTOR|WITH_WEIGHT|WEIGHT_FLOAT32 Tags -
今の所、
WEIGHT_FLOAT32フラグは、COLUMN_INDEXフラグと併用できません。
さいごに
それでは、Groongaでガンガン検索してください!