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