お知らせ¶
9.0.0リリース - 2019-02-09¶
メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく9.0.0へアップグレードできます。
改良¶
- [トークナイザー] 新しいトークナイザー
TokenPatternを追加しました。- 正規表現を使ってトークンを抽出できます。
- このトークナイザーは正規表現にマッチしたトークンのみを抽出します。
- 正規表現のパターンは複数指定できます。
- 正規表現を使ってトークンを抽出できます。
- [トークナイザー] 新しいトークナイザー
TokenTableを追加しました。- 既存のテーブルのカラムの値を使ってトークンを抽出できます。
- [dump] バイナリデータのダンプに対応しました。
- [select] インデックスカラムに対する類似文書検索をサポートしました。
- マルチカラムインデックスを使用している場合、この機能を使って、全てのソースカラムに対して類似文書検索ができます。
- [ノーマライザー]
NormalizerNFKC100に新しいオプションremove_blankを追加しました。- このオプションは空白を取り除きます。
- [groonga 実行ファイル] ログ内のThreadIDの表示を改善しました。
- Windows版では、ProcessIDとThreadIDを混同しやすかったので、どちらがThreadIDでどちらがProcessIDかを明確にしました。
8.1.1リリース - 2019-01-29¶
改良¶
- [logical_select] 新しい引数
--load_table、--load_columns、--load_valuesを追加しました。logical_selectの結果を--load_tableで指定したテーブルへ格納できます。--load_valuesオプションは、logical_selectの結果のカラムを指定します。--load_columnsオプションは、--load_tableで指定したテーブルのカラムを指定します。- このようにして、
--load_valuesで指定したカラムの値を、--load_columnsで指定したカラムへ格納できます。
- インデックスの更新エラー時のログを改善しました。
- ログに、より詳細な情報を追加しました。
- 例えば、ポスティングリストのマージに失敗した時にマージ元のバッファーとチャンクを出力します。
- また、バッファー確保のエラーが発生した時は、バッファーの空き領域と要求サイズをログに出力します。
- ログに、より詳細な情報を追加しました。
- [groonga 実行ファイル] 新しいオプション
--log-flagsを追加しました。- Groongaのログに出力する項目を指定できます。
- 以下のような項目を出力できます。
- タイムスタンプ
- ログメッセージ
- ロケーション(ログが出力された場所)
- プロセスID
- スレッドID
- 以下のように接頭辞を指定できます。
+- この接頭辞は、 "フラグを追加する"という意味です。
-- この接頭辞は、"フラグを削除する"という意味です。
- 接頭辞無しは、"存在しているフラグを置き換える"という意味です。
- 具体的には、以下のようにフラグ指定できます。
none- ログに何も出力しません。
time- ログにタイムスタンプを出力します。
message- ログにメッセージを出力します。
location- ログの出力場所(ファイル名、行数、関数名)とプロセスIDを出力します。
process_id- ログにプロセスIDを出力します。
pid- このフラグは、
process_idのエイリアスです。
- このフラグは、
thread_id- ログにスレッドIDを出力します。
all- このフラグは、
noneとdefault以外の全てのフラグを指定します。
- このフラグは、
default- ログに、タイムスタンプとログメッセージを出力します。
|を使って、複数のフラグを指定することもできます。
修正¶
インデックスの更新エラー発生時にメモリリークする問題を修正しました。
[ノーマライザー] ステートレスなノーマライザーとステートフルなノーマライザーを同時に使用した時に、それらが誤った結果を返すバグを修正しました。
- ステートレスなノーマライザーとは以下です。
unify_kanaunify_kana_caseunify_kana_voiced_sound_markunify_hyphenunify_prolonged_sound_markunify_hyphen_and_prolonged_sound_markunify_middle_dot
- ステートフルなノーマライザーとは以下です。
unify_katakana_v_soundsunify_katakana_bu_soundunify_to_romaji
- ステートレスなノーマライザーとは以下です。
8.1.0リリース - 2018-12-29¶
改良¶
- [httpd] バンドルしているnginxのバージョンを1.15.8に更新しました。
修正¶
io_flushコマンド実行後に、DBに対するアンロックが常にフラッシュの実行後になってしまうバグを修正しました。- 参照先を持たないレコードを持つテーブルに対して
reindexコマンドを実行した際に、reindexコマンドが終了しないバグを修正しました。
8.0.9リリース - 2018-11-29¶
改良¶
- [トークナイザー] トークナイザーの作成に失敗した際のエラーメッセージにトークナイザーの名前を出力するよう改良。
- [トークナイザー][TokenDelimit] トークンの区切り文字のカスタマイズをサポートしました。
- 空白以外のトークンを区切り文字に使えます。
- [トークナイザー][TokenDelimit] 新しいオプション
patternを追加しました。- このオプションにより、区切り文字にに正規表現を指定できます。
- [トークナイザー] 各トークンの情報に
force_prefix_searchの値を追加しました。- "force_prefix" は後方互換のため残しています。
- [トークンフィルター] ビルトインのトークンフィルタ
TokenFilterNFKC100を追加しました。- NormalizerNFKC100のように
unify_kanaオプションで、カタカナをひらがなへ変換できます。
- NormalizerNFKC100のように
- [トークンフィルター][TokenFilterStem] 新しオプション
algorithmを追加しました。- このオプションによって、英語以外の言語(フランス語、スペイン語、ポルトガル語、イタリア語、ルーマニア語、ドイツ語、オランダ語、スウェーデン語、ノルウェー語、デンマーク語、ロシア語、フィンランド語)をステミングできます。
- [トークンフィルター][TokenFilterStopWord] 新しいオプション
columnを追加しました- このオプションによって、is_stop_word以外のカラムをスットプワードに指定できます。
- [dump] トークンフィルターのオプションの出力をサポートしました。
TokenNgramやTokenMecab等のようなオプションを持つトークナイザーを指定した場合、それらのオプションもtable_listコマンドで出力できます。
- [truncate] トークンフィルターのオプションを持ったテーブルをサポートしました。
TokenFilterStemやTokenStopWord等のようなオプションを持つトークナイザーを持つテーブルでもtruncateできます。
- [schema] トークンフィルターのオプションの出力をサポートしました。
- [ノーマライザー]
NormalizerNFKC100に新しいオプションunify_to_romajiを追加しました。- このオプションによって、ひらがなとカタカナをローマ字に正規化できます。
- [query-log][show-condition] "func() > 0"をサポートしました。
- [Windows] アンマップ前のフラッシュを確実にするよう改善しました。
- ファイル入力のエラーメッセージを改善しました。
- [httpd] バンドルしているnginxのバージョンを1.15.7に更新しました。
- CVE-2018-16843とCVE-2018-16844のセキュリティの修正が含まれています。
修正¶
ウインドウ関数を評価する際にメモリリークする問題を修正しました。
[groonga-httpd] ログの内容が混在することがあるバグを修正しました。
output_columnsのスライスのエラーが発生した際に、無効なJSONが生成されるバグを修正しました。
ネストして参照されているベクターカラムの値を取得する際にメモリリークする問題を修正しました。
インデックス破損を警告するログを出力する際にクラッシュするバグを修正しました。
式の評価で一時的なベクターが再利用された時にクラッシュするバグを修正しました。
- 例えば、以下のようにベクターを使った式を評価する時にクラッシュします。
_score = _score + (vector_size(categories) > 0)deleteコマンドで削除したベクターカラムの値がヒットするバグを修正しました。[dodaisukeさんの報告]
感謝¶
- dodaisukeさん
8.0.8リリース - 2018-10-29¶
改良¶
[table_list] デフォルトトークナイザーのオプションをサポートしました。
TokenNgramやTokenMecab等のようなオプションを持つトークナイザーを指定した場合、それらのオプションもtable_listコマンドで出力できます。
[select]
record @ 'query'を使ったシーケンシャルマッチでノーマライザーのオプションをサポートしました。[truncate] トークナイザーのオプションを持ったテーブルをサポートしました。
TokenNgramやTokenMecab等のようなオプションを持つトークナイザーを持つテーブルでもtruncateできます。
[トークナイザー][TokenMecab]
TokenMecabにtarget_classオプションを追加しました。このオプションは、指定した品詞のトークンを検索します。例えば、名詞のみを検索することができます。
このオプションは、以下のようにサブクラスを指定することや、
+や-を使って、特定の品詞を追加または除外することもできます。したがって、以下のように代名詞を除外して検索することもできます。'TokenMecab("target_class", "-名詞/代名詞", "target_class", "+")'
[io_flush]
io_flush中のデータベースのロックをサポートしました。io_flush実行中にio_flush対象のテーブルを削除するとGroongaがクラッシュする問題があったためです。
[cast_loose] 新しい関数
cast_loose()を追加しました。- この関数は、指定した型へキャストします。もし、指定した値がキャストできない場合、値は、指定したデフォルト値になります。
条件式の評価順序の最適化を追加しました。(実験的)
以下のように環境変数を設定することでこの機能を有効にできます。
GRN_EXPR_OPTIMIZE=yes
インデックス検索可能な正規表現に
(?-mix:XXX)記法をサポートしました。 [groonga-dev,04683][ Masatoshi SEKIさんの報告](?-mix:XXX)は XXX と同じ扱いです。
[httpd] バンドルしているnginxのバージョンを1.15.5に更新しました。
Ubuntu 18.10 (Cosmic Cuttlefish)をサポートしました。
修正¶
- Groonga GQTP サーバーが新しい接続を受け付けなくなることがあるバグを修正しました。[groonga-dev,04688][Yutaro Shimamuraさんの報告]
- quitを使わずにクライアントプロセスを中断した時に発生します。
感謝¶
- Masatoshi SEKIさん
- Yutaro Shimamuraさん
8.0.7リリース - 2018-09-29¶
改良¶
[トークナイザー][TokenMecab] Mecabのメタデータの出力をサポートしました。
TokenMecabにinclude_classオプションを追加しました。このオプションは、Mecabのメタデータの
classとsubclassを出力します。TokenMecabにinclude_readingオプションを追加しました。このオプションは、Mecabのメタデータの
readingを出力します。TokenMecabにinclude_formオプションを追加しました。このオプションは、Mecabのメタデータの
inflected_typeとinflected_form、base_formを出力します。TokenMecabにuse_readingオプションを追加しました。このオプションは、読みがなによる検索をサポートします。
このオプションは、読みがなを使った検索をするため、表記ゆれの対策として有用です。
[plugin] 複数のディレクトリからプラグインを取得できるようになりました。
GRN_PLUGINS_PATHに複数のディレクトリを指定できます。Windowsの場合は、":"でWindows以外では、";"で区切ります。GRN_PLUGINS_PATHは、GRN_PLUGINS_DIRより優先度が高いです。現状、このオプションはWindowsではサポートされていません。[トークナイザー][TokenNgram]
TokenNgramにunify_alphabetオプションを追加しました。TokenNgram("unify_alphabet", false)はTokenBigramSplitAlphaと同じ動作です。[トークナイザー][TokenNgram]
TokenNgramにunify_symbolオプションを追加しました。TokenNgram("unify_symbol", false)は、TokenBigramSplitSymbolと同じ動作です。[トークナイザー][TokenNgram]
TokenNgramにunify_digitオプションを追加しました。TokenNgram("unify_digit", false)は、TokenBigramSplitDigitと同じ動作です。[httpd] バンドルしているnginxのバージョンを1.15.4に更新しました。
修正¶
- いくつかのケースでの誤ったスコア計算を修正しました。
- ブール値に数値を加算、乗算または除算するときに発生します。
!=や==を使ってスカラーとベクトルの列を比較するときに発生します。
8.0.6リリース - 2018-08-29¶
改良¶
- [トークナイザー][TokenMecab]
chunked_tokenizeとchunk_size_thresholdの両オプションに対応しました。 - [optimizer] query family expressionの推定に対応しました。
column @ queryやcolumn @~ patternのようなquery family expressionについて、より効果的な実行計画を立てられます。 - [optimizer] オプティマイザをプラグインから組み込みの機能に変更し、初期状態で無効としました。環境変数を
GRN_EXPR_OPTIMIZE=yesと定義するか、従来通りにexpression_rewritersテーブルを使う事で機能を有効化できます。 - 充分に絞り込み済みの場合において、初期状態でシーケンシャルサーチを行うようにしました。現在の結果が充分に少数である場合、シーケンシャルサーチはインデックス検索よりも高速です。現在の結果が元の結果の1%で1000件未満の場合、インデックス検索可能な場合であってもシーケンシャルサーチが使われます。この機能は環境変数で
GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.0と設定する事で無効化できます。 - [load] エラーメッセージにテーブル名を含めるようにしました。
- [load]
lock_tableオプションを追加しました。--lock_table yesが指定された場合、カラムの更新と--eachの適用を行っている間、loadは対象のテーブルをロックします。このオプションはloadとdeleteの衝突を防ぎますが、読み込みの性能を低下させるでしょう。 - [vector_find] サポートされていないモードでクラッシュしないようにしました。
修正¶
- [index]
HASH_KEYを伴ったテキストのベクターに対するオフラインでのインデックス構築に関して、誤ったセクションIDを持つインデックスが構築されてしまうバグを修正しました。 --match_columns 'index[0] || index[9]'が誤ったセクションを使用してしまう問題を修正しました。- [highlighter] 語彙表がハッシュテーブルで、且つキーワードがN-gramのNよりも少ない文字数の場合に、誤ったハイライトが行われていた問題を修正しました。
- [mruby] 本当のエラーが隠されていた問題を修正しました。mrubyは引数無しで投げられたエラーの伝搬に対応していません。https://github.com/mruby/mruby/issues/290
- [トークナイザー][TokenNgram loose]: クエリが曖昧な種類のみであった場合に検索結果が見つからない問題を修正しました。語彙表を伴っての
highlight_html()も同様に壊れていました。 - テキストから数値への変換において、後続するゴミ部分が無視されていた問題を修正しました。 "0garbage" は変換エラーになります。
reference_column >= 'key_value'に当てはまる場合の最適化の問題を修正しました。
8.0.5リリース - 2018-07-29¶
改良¶
- [スクリプト構文] 類似文書検索の補足説明とその日本語訳を追加しました。 [GitHub groonga/GitHub#858] [堀本さんがパッチ提供]
- [time_classify_day_of_week] 新しい関数
time_classify_day_of_week()を追加しました。 -fstack-protectorで警告を抑制するようにしました。(OBATA Akioさんが提案)- 新しいAPI
time_format_iso8601()を追加しました。 grn_raw_string構造体を公開。- 新しいAPI:
grn_obj_clear_option_values()を追加しました。永続的なデータベースのremoveと一時的なデータベースのcloseの際にオプションの値を消去できます。 - [log]
[ii][update][one]のエラーメッセージにインデックスカラム名を出力するようにしました。 - [httpd] バンドルしているnginxのバージョンを1.15.2に更新しました。
- [Ubuntu] Ubuntu 17.10 (Artful Aardvark)のサポートをやめました。2018年7月19日でサポートが切れた(EOLになった)ためです。
- [Debian GNU/Linux] jessieのサポートをやめました。Debianのセキュリティ&リリースチームはもはやjessieの更新を提供しません。
修正¶
- POSTでの
/d/loadへのデータ送信が中断された後に誤った結果が返されていたのを修正しました。 - KyTeaに関する間違った関数呼び出しを修正しました。
- [grndb]
--force-truncateオプションのラベルを追加しました。 groonga-normalizer-mysqlのようにプラグインとして提供されているノーマライザーでオプションを使った場合に、データベースを終了するときにクラッシュする問題を修正しました。- ノーマライザーとトークナイザーのオプションが無視される場合があった問題を修正しました。この問題は同じオブジェクトIDが再利用された場合に発生していました。
8.0.4リリース - 2018-06-29¶
改良¶
- [log]
[ii][update][one]のエラーメッセージにサブエラーを追加しました。 - 新しいAPI
grn_highlighter_clear_keywords()を追加しました。 - 新しいpredicate
grn_obj_is_number_family_bulk()を追加しました。 - 新しいAPI
grn_plugin_proc_get_value_mode()を追加しました。 - [vector_find] 新しい関数
vector_find()を追加しました。 - msgpackでのmemcpyの警告を抑制しました。
- mrubyを1.0.0から1.4.1に更新しました。
- [doc][grn_obj]
grn_obj_is_index_column()のAPIリファレンスを追加しました。 - [windows] printfフォーマットの警告を抑制しました。
- [windows] msgpackによる警告を抑制しました。
- [grn_obj][Plugin] エンコーディングコンバーターを追加しました。ルール:
- grn_ctx::errbuf: grn_encoding
- grn_logger_put: grn_encoding
- mruby: UTF-8
- path: locale
- [mrb]
LocaleOutputを追加しました。 - [windows] イメージのパスのgrn_encodingへの変換をサポートしました。
- [トークナイザー][TokenMecab] エラーメッセージのエンコーディングを変換するようにしました。
- [window_sum] 対象カラムとしての動的カラムをサポートしました。
- [doc][grn_obj]
grn_obj_is_vector_column()のAPIリファレンスを追加しました。 - [column_create] より多くのバリデーションを追加しました。
- 1: ベクターカラムの全文検索インデックスは
WITH_SECTIONフラグが必要です。(ただし、WITH_POSITIONあり、WITH_SECTIONなしのTokenDelmitは許容されます。これはタグ検索に便利なパターンです。) - 2: ベクターカラムの全文検索インデックスはマルチカラムインデックスであってはいけません。詳細: https://github.com/groonga/groonga/commit/08e2456ba35407e3d5172f71a0200fac2a770142
- 1: ベクターカラムの全文検索インデックスは
- [grndb] 実装が不十分だったため、ログのチェックを一時的に無効にしました
修正¶
- [sub_filter] 十分にフィルターされたケースで、スコアが多すぎる問題を修正
- KyTeaがインストールされているとビルドに失敗する問題を修正しました。
- [grndb] 出力チャネルを修正しました。
- [query-log][show-condition] クラッシュするバグを修正しました(まだ残っている可能性があります)。
- [highlighter][lexicon] ハイライトされないバグを修正しました。キーワードの長さがN未満(N-gramのN。多くの場合はBigramなので2未満)の場合、キーワードがハイライトされていませんでした。
- [windows] base path検出時の問題を修正しました。システムロケールのDLLパスが、CP932での「U+8868 CJK UNIFIED IDEOGRAPH-8868」のように0x5c (ASCIIでの
\)を含む場合に問題がありました。 - [トークナイザー][TokenNgram] 最初の文字の長さの誤りを修正しました。この問題は、「U+3231 PARENTHESIZED IDEOGRAPH STOCK」のような「PARENTHESIZED IDEOGRAPH」文字で起きていました。
8.0.3リリース - 2018-05-29¶
改良¶
[highlight_html]
NormalizerNFKC100またはTokenNgramを使って検索した結果のハイライトをサポートしました。[トークナイザー]
TokenNgramに新しいオプションreport_source_location optionを追加しました。このオプションは、highlight_htmlで語彙表を使ったハイライトをする時に使用します。[ノーマライザー]
NormalizerNFKC100に新しいオプションunify_middle_dot optionを追加しました。このオプションは、中点を正規化します。・の有無や・位置にかかわらず検索できます。[ノーマライザー]
NormalizerNFKC100に新しいオプションunify_katakana_v_sounds optionを追加しました。このオプションは、ヴァヴィヴヴェヴォをバビブベボへ正規化します。例えばバイオリンをヴァイオリンで検索できます。[ノーマライザー]
NormalizerNFKC100に新しいオプションunify_katakana_bu_sound optionを追加しました。このオプションは、ヴァヴィヴゥヴェヴォをブに正規化します。例えば、セーブルやセーヴルをセーヴェルで検索できます。[sub_filter] 十分にフィルターされたケースでの
sub_filterの動作を最適化しました。この最適化は、sub_filter実行前に十分にレコードが絞り込まれているケースで有効になります。[groonga-httpd] 全てのワーカのコンテキストアドレスをユニークにしました。コンテキストアドレスは、以下のクエリーログの
#{ID}です。#{TIME_STAMP}|#{MESSAGE}#{TIME_STAMP}|#{ID}|>#{QUERY}#{TIME_STAMP}|#{ID}|:#{ELAPSED_TIME} #{PROGRESS}#{TIME_STAMP}|#{ID}|<#{ELAPSED_TIME} #{RETURN_CODE}[delete] 新しいオプション
limitを追加しました。以下の例のように、削除するレコードの件数を制限できます。delete --table Users --filter '_key @^ "b"' --limit 4[httpd] バンドルしているnginxのバージョンを1.14.0に更新しました。
修正¶
- [logical_select] 動的カラムをフィルターした時にエラーが発生するとメモリリークする不具合を修正しました。
- [logical_count] 動的カラムの初期化に失敗した際にメモリリークする不具合を修正しました。
- [logical_range_filter] 動的カラムの評価に失敗した際にメモリリークする不具合を修正しました。
- [トークナイザー]
loose_symbolのように緩いトークナイズをした時にsource_offsetが誤った値になる不具合を修正しました。 - [ノーマライザー]
U+FF21 FULLWIDTH LATIN CAPITAL LETTER Aのような全角ラテン大文字が、U+0061 LATIN SMALL LETTER Aのようなラテン小文字に正規化されない不具合を修正しました。すでに、NormalizerNFKC100を使用している場合は、インデックスを再生成する必要があります。
8.0.2リリース - 2018-04-29¶
改良¶
[grndb][--force-truncate]
grndb recover --force-truncateオプションを指定することで、テーブルにロックが残ったままの状態でも truncate できるようにしました。[logical_range_filter]
sort_keysオプションに対応しました。新しい関数
time_format()を追加しました。Time型のカラムの値を時刻表記で出力できます。書式はstrftime用の形式を指定できます。[トークナイザー] 新しいトークナイザー
TokenNgramを追加しました。このトークナイザーは、オプションを通じて挙動を動的に変えることができます。対応しているオプションは以下の通りです。n: Ngram の「N」を指定します。例えば trigram の場合は「3」です。loose_symbol: 記号を含む語句について、記号の有無の違いを無視して検索できるようにトークナイズします。例えば「090-1111-2222」という語句は、「09011112222」「090」「1111」「2222」「090-1111-2222」のいずれで検索した場合にも検索結果としてヒットするようになります。loose_blank: 空白を含む語句について、空白の有無の違いを無視して検索できるようにトークナイズします。例えば「090 1111 2222」という語句は、「09011112222」「090」「1111」「2222」「090 1111 2222」のいずれで検索した場合にも検索結果としてヒットするようになります。remove_blank: 空白を含む語句について、空白無しの語句で検索できるようにトークナイズします。例えば「090 1111 2222」という語句は、「09011112222」「090」「1111」「2222」のいずれで検索した場合にも検索結果としてヒットするようになります。空白を含む語句「090 1111 2222」での検索にはヒットしない点にご注意下さい。
[ノーマライザー] Unicode 10.0 の NFKC(Normalization Form Compatibility Composition)に基づくノーマライザーである "NormalizerNFKC100" を追加しました。
[ノーマライザー] ノーマライザーの "NormalizerNFKC51" と "NormalizerNFKC100" でのオプション指定に対応しました。ノーマライザーの挙動を動的に変えることができます。対応しているオプションは以下の通りです。
unify_kana: 同じ音となる全角ひらがな、全角カタカナ、半角カタカナの文字を同一視します。unify_kana_case: 全角ひらがな、全角カタカナ、半角カタカナで拗音、促音などを表す小さな文字(例:「ぁ」「ゃ」「っ」)を大きな文字と同一視します。unify_kana_voiced_sound_mark: 全角ひらがな、全角カタカナ、半角カタカナで濁点や半濁点の有無を同一視します。unify_hyphen: ハイフンに類する文字すべてをハイフンと同一視します。unify_prolonged_sound_mark: 長音記号に類する文字すべてを長音記号と同一視します。unify_hyphen_and_prolonged_sound_mark: ハイフンに類する文字と長音記号に類する文字のすべてをハイフンと同一視します。
[dump] トークナイザーとノーマライザーのオプションの出力に対応しました。トークナイザーまたはノーマライザーのオプションを含んだ状態でGroonga 8.0.2およびそれ以降で出力した dump は、Grooga 8.0.1以前のバージョンでは読み込めず、未対応の情報によりエラーとなります。
[dump] トークナイザーとノーマライザーのオプションの出力に対応しました。トークナイザーまたはノーマライザーのオプションを含んだ状態でGroonga 8.0.2およびそれ以降で出力した schema は、Grooga 8.0.1以前のバージョンでは読み込めず、未対応の情報によりエラーとなります。
Ubuntu 18.04 (Bionic Beaver)をサポートしました。
修正¶
- スペースのみの検索クエリが意図しないレコードにマッチする不具合を修正しました。[groonga-dev,04609][satouyuzhさんの報告]
- 誤ったスコアラーが使われる場合があった不具合を修正しました。この問題は以下のように複数のスコアラーが使われた時に発生していました:
--match_columns 'title || scorer_tf_at_most(content, 2.0)' - 「thread_limit」の変更に時間がかかりすぎる問題を修正しました。
感謝¶
- satouyuzhさん
8.0.1リリース - 2018-03-29¶
改良¶
[ログ] クエリーログ内で
filter条件を表示するようにしました。この機能はデフォルトでは、無効になっています。有効にするためには、環境変数GRN_QUERY_LOG_SHOW_CONDITION=yesを設定します。*.pdbを*.dllと*.exeと同じディレクトリにインストールされるようにしました。[logical_count]
filteredステージの動的カラムをサポートしました。[logical_count] [post_filter] フィルタータイミングを新規追加しました。
filteredステージのカラムが生成された後に実行されます。[logical_select] [post_filter] フィルタータイミングを新規追加しました。
filteredステージのカラムが生成された後に実行されます。ベクターデータに対してLZ4/Zstd/zlibの圧縮をサポートしました。
_keyのようなアクセサへのエイリアスをサポートしました。[logical_range_filter] 大きい結果セットに対するウィンドウ関数の動作を最適化しました。一致するレコードが十分見つかった場合は、残りのウィンドウに対してウィンドウ関数を適用しません。
TODO: この最適化は、最適化によるオーバーヘッドが無視出来ない場合、小さな結果セットに対しては、無効になります。 オーバーヘッドがどのくらいになるのかは、まだ評価出来ていません。
[select]
match_escalationパラメーターを追加しました。--match_escalation yesとすることによって、マッチ演算のエスカレーションを強制的に有効にします。このパラメータは、--match_escalation_threshold 99999....999よりも強力です。match_escalation yesは、SOME_CONDITIONS && column @ 'query'もエスカレーションしますが、--match_escalation_thresholdではしないためです。デフォルトは、
--match_escalation autoです。これは、既存の動作と同じです。--match_escalation noとすることで、マッチ演算のエスカレーションを無効にできます。これは、--match_escalation_threshold -1と同様の動きになります。[httpd] バンドルしているnginxのバージョンを1.13.10に更新しました。
修正¶
- 共通接頭辞がどのトークンにもマッチしない時にメモリリークする問題を修正しました。[GitHub#820] [村上さんがパッチ提供]
- 同一プロセスで複数のデータベースを開いている時に、異なるデータベースのキャッシュを使用してしまう問題を修正しました。
- 誤ったインデックスが構築される問題を修正しました。この問題は、インデックスカラムのソースがベクターカラムでかつ、
WITH_SECTIONを指定していない時だけ発生します。 - 比較時(>,>=,<,<=,==,!=)に定数がオーバーフローまたは、アンダーフローし得る問題を修正しました。
感謝¶
- 村上さん
8.0.0リリース - 2018-02-09¶
メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなくアップグレードできます。
改良¶
[select]
--drilldown_adjusterとdrilldowns[LABEL].adjusterを追加しました。drilldown結果に対して、スコア調整できるようになります。[動的なインデックス構築方法] 環境変数の名前を
GRN_II_REDUCE_EXPIRE_ENABLEからGRN_II_REDUCE_EXPIRE_THRESHOLDへ変更しました。GRN_II_REDUCE_EXPIRE_THRESHOLD=0 == GRN_II_REDUCE_EXPIRE_ENABLE=no。GRN_II_REDUCE_EXPIRE_THRESHOLD=-1とすると、しきい値はii->chunk->max_map_seg / 2となります。GRN_II_REDUCE_EXPIRE_THRESHOLD > 0とすると、しきい値はMIN(ii->chunk->max_map_seg / 2, GRN_II_REDUCE_EXPIRE_THRESHOLD)となります。デフォルト値は、GRN_II_REDUCE_EXPIRE_THRESHOLD=32です。[between] 境界値なしの
between()を受け付けるようにしました。between()の引数の数が3つでも実行できます。2番目と3番目の引数が境界を含むものとして処理されます。
修正¶
- ハッシュテーブルのメモリリークを修正しました。 [GitHub:mroonga/mroonga#190][fuku1さんの報告]
- 配列のメモリリークを修正しました。
- [select]
output_columnsで結果の変化する関数を使っている時にキャッシュしないようにしました。 - [Windows]
WSASendが適切なエラーコードを返すようにしました。
感謝¶
- fuku1さん
7.1.1リリース - 2018-01-29¶
改良¶
[Ubuntu] Ubuntu 17.04(Zesty Zapus)のサポートをやめました。2018年1月13日でサポートが切れた(EOLになった)ためです。
Quorum matchをサポートしました。スクリプト構文でもクエリー構文でもquorum matchを使うことができます。
TODO: quorum matchの構文をドキュメントへ追加、それらのドキュメントへのリンク生成
スクリプト構文で類似度のカスタマイズをサポートしました。スクリプト構文内で類似度のカスタマイズができます。
TODO: 類似度のカスタマイズの構文をドキュメントへ追加、それらのドキュメントへのリンク生成
[grndb][--force-lock-clear]
--force-lock-clearを追加しました。このオプションは、データベースやテーブル、データカラムのロックを強制的に解除します。データベースやテーブル、データカラムにロックが残っていても再度データベースを使えるようになります。しかし、このオプションはとても危険です。通常は使うべきではありません。データベースが壊れている場合は、データベースは依然として破損しています。このオプションはロックを無視するだけです。
[load] サロゲートペアをエスケープ可能にしました。例えば、
\uD83C\uDF7Aは🍺として処理されます。[Windows] Windows上でスパースファイルを使用するように変更しました。ディスク容量を節約できます。パフォーマンス上のデメリットはありません。
[動的なインデックス構築方法] インデックスカラム内のメモリーマップをいつ開放するかをコントロールする環境変数
GRN_II_REDUCE_EXPIRE_THRESHOLDを追加しました。デフォルトは-1です。-1のときはインデックスカラムのサイズによって動的に開放するタイミングを決めます。インデックスカラムが小さければ頻繁に解放し、大きければ頻度を下げます。0を設定すると従来と同じ挙動になります。従来の挙動とは、Groongaは開放できそうなときはいつも開放しようとするという挙動です。[logical_range_filter] [post_filter]フィルタータイミングを新規追加しました。
filteredステージで生成されるカラムが生成された後に実行されます。
修正¶
- 参照ベクタのインデックスを作成する際に使用するリソースを削減しました。[GitHub#806][村上さんが報告]
- [table_create]
token_filtersが無効であってもテーブルが作成される不具合を修正しました。
感謝¶
- 付超群さん
- 村上さん
7.1.0リリース - 2017-12-29¶
改良¶
[load]
loadコマンドのクエリーログのフォーマットを改良しました。loadコマンドのクエリーログに以下の項目が追加されます。- ロードしたレコード数を表示します。
- ロードがエラーになったレコードとカラムの数を表示します。
- ロード後の総レコード数を表示します。
[logical_count]
logical_countコマンドのクエリーログのフォーマットを改良しました。logical_countコマンドのクエリーログに以下の項目が追加されます。- マッチしたレコード数を表示します。
[logical_select]
logical_selectコマンドのクエリーログのフォーマットを改良しました。logical_selectコマンドのクエリーログに以下の項目が追加されます。- マッチしたレコード数を表示します。
- ドリルダウンした数を表示します。
- ラベルつきのドリルダウンをした数を表示します。
- それぞれのシャードで検索にマッチした数を表示します。
- 検索対象のシャードの情報を"[...]"を使って表示します。
[delete]
deleteコマンドのクエリーログのフォーマットを改良しました。deleteコマンドのクエリーログに以下の項目が追加されます。- 削除したレコード数と削除に失敗したレコード数を表示します。
- 削除後に残ったレコード数を表示します。
[Groonga HTTPサーバー]
groonga -sで実行したサーバーをC-c で確実に停止出来るようにしました。Lisp表現(
#<nan>、#i1/0、#-i1/0)の代わりにNanとInfinity、-Infinityを使用するように改良しました。ドリルダウンでベクター型のカラムをサポートしました。
部分的に正規表現を用いた検索から、キーワードを抽出出来るように改良しました。これにより、正規表現を用いた検索に
highlight_htmlとsnippet_htmlを使えるようになります。[takagi01さんに報告いただきました]grn_bulk_*()APIにおいて、realloc()が呼ばれる回数を削減しました。Windowsにおいて出力が大きいケースでパフォーマンスが向上します。例えば、出力が100MBを超える場合には、約100倍速くなります。
realloc()はWindowsでは重い処理であるためです。GRN_II_OVERLAP_TOKEN_SKIP_ENABLEの値にyesが設定された時のみGRN_II_OVERLAP_TOKEN_SKIP_ENABLEを有効にするようにしました。GRN_NGRAM_TOKENIZER_REMOVE_BLANK_DISABLEは非推奨になりました。代わりにGRN_NGRAM_TOKENIZER_REMOVE_BLANK_ENABL=noを使って下さい。関数
index_column_source_recordsを新規に追加しました。インデックスカラムのソースを取得することができます。[村上さんがパッチを提供][select] offsetに負の値を設定出来るようにしました。
固定サイズのカラムの値を取得する際のパフォーマンスを向上しました。
[groonga 実行ファイル] groongaコマンドの引数に
--listen-backlogオプションを追加しました。listenシステムコールのbacklogをカスタマイズできます。[httpd] バンドルしているnginxのバージョンを1.13.8に更新しました。
修正¶
highlight_full関数を使用するとメモリリークする問題を修正しました。Mroongaで以下ような呼び出しを行った際にクラッシュする問題を修正しました。
grn_expr_append_const("_id")grn_expr_append_op(GRN_OP_GET_VALUE)
感謝¶
- takagi01
- 村上さん
7.0.9リリース - 2017-11-29¶
改良¶
- Apache Arrowの新しいバージョンをサポートしました。このリリースでは、Apache Arrowサポートを有効にするには0.8.0以降が必要です。
- [sharding] 動的カラムの新しいAPIを追加しました。
- Groonga::LabeledArguments
- [sharding] 便利メソッドである
Table#select_allを追加しました。 - [logical_range_filter] 動的カラムをサポートしました。
initialとfilteredステージのみをサポートしています。 - [logical_range_filter]
cache引数と動的カラムに関するドキュメントを追加しました。 - [logical_count] 動的カラムをサポートしました。
initialステージのみサポートしています。 - [logical_count] 名前付き引数のドキュメントを追加しました。
- [select]
--match_columns _keyをインデックスを使わない場合でもサポートしました。 - [in_values] 126を超える引数を指定できるようにしました。 [GitHub#760] [GitHub#781] [groonga-dev,04449] [むらたさんが報告]
- [httpd] バンドルしているnginxのバージョンを1.13.7に更新しました。
修正¶
- [httpd] 古いバージョンのGroongaがすでにインストールされている場合にそちらを参照してしまい、ビルドエラーになる問題を修正しました。 [GitHub#775] [myamanishi3さんが報告]
- [in_values]
in_valuesに多すぎる引数を指定するとクラッシュする不具合を修正しました。この不具合は126を超える引数をサポートする過程で見つかりました。 [GitHub#780] - [cmake] LZ4 と MessagePack をビルド時に正しく検出できるようにしました。 [Sergei Golubchikさんが報告]
- [静的なインデックス構築方法] ベクターカラムの静的索引構築時に必要以上のリソースを使用する問題を修正しました。1つのベクターカラムの要素数が多く、大量のレコードがある場合はGroongaがクラッシュしていました。 [groonga-dev,04533][内山敏郎さんが報告]
感謝¶
- むらたさん
- myamanishi3さん
- Sergei Golubchikさん
- 内山敏郎さん
7.0.8リリース - 2017-10-29¶
改良¶
- [windows] クラッシュした際にバックトレースを出せるようにしました。関数呼び出しだけでなく、ソースコードの該当行も可能な限り表示します。バックトレースのサポートにより、問題の素早い解決につながります。
QUERY_NO_SYNTAX_ERRORを指定してあれば "( )" を--queryに指定して実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]QUERY_NO_SYNTAX_ERRORを指定してあれば "(+)" を--queryに指定して実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]QUERY_NO_SYNTAX_ERRORを指定してあれば--query "~y"(~ではじまる)クエリーを実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]expiredのログレベルをinfoからdebugに変更しました。2017-10-29 14:05:34.123456|i| <0000000012345678:0> expired i=000000000B123456 max=10 (2/2)このメッセージはインデックスをメモリーにマップした後で開放されたときに記録されます。つまり、メモリーの使用状況に関するデバッグには有用ですが、通常の運用においては有用ではありません。そのためログレベルをdebugに変更しました。- Ubuntu 17.10 Artful Aardvarkをサポート。
修正¶
- [dat] データベースを拡張する際、意図せず大きなファイルが(ワーストケースで)作成されてしまうことのある不具合を修正しました。この不具合はインデックスカラムを頻繁に作成/削除を繰り返したときに発生する可能性があります。7.0.7ではこの不具合に関連して"大量にキーを削除したケースで
table_createに失敗する"問題を修正しましたが、その修正が不十分なケースに対応しました。 - [logical_select]
offsetとlimitが複数のシャードに対して適用されたとき、実際よりも少ないレコードが返される不具合を修正しました。
7.0.7リリース - 2017-09-29¶
改良¶
QUERY_NO_SYNTAX_ERRORを+のみのクエリーに指定したときにも動作するようにしました。以前のバージョンではそのようなクエリーはエラーになっていました。[httpd] バンドルしているnginxのバージョンを1.13.5に更新しました。
[dump] 引数のデフォルト値を構文のセクションに追加しました。
[コマンドバージョン]
--default-command-version 3に対応しました。関数呼び出し時に検索結果をキャッシュできるようにしました。ほとんどの関数の呼び出し結果はキャッシュされます。例外は
now()とrand()を使った場合です。標準でキャッシュするように振る舞いを変更したので、新たにAPIを追加しました。grn_proc_set_is_stable()を追加。grn_proc_is_stable()を追加。
呼び出しごとに結果が異なる関数を新規に追加する場合、
grn_proc_is_stable(ctx, proc, GRN_FALSE)を呼ばなければなりません。もし呼ばなかった場合には、検索結果がキャッシュされるので、期待と異なり誤った結果を返します。
修正¶
[windows]
database_unmapが実行される前のファイルハンドルのエラー処理を適切に行うようにしました。database_unmap実行前にリクエストがキャンセルされた場合、排他制御部分が未初期化となる場合がありました。その場合、クラッシュしていました。[トークナイザー] トークナイザー名のドキュメントを修正しました。
TokenBigramIgnoreBlankSplitSymbolAlphaやTokenBigramIgnoreBlankSplitSymbolAlphaDigitであるべきでした。エラー時に空のファイルが残らないようにしました。
以前のバージョンでは、空のファイルがエラー時に残っていました。
再現するためのシナリオは以下です。:
grn_fileinfo_openによりファイルの作成に成功するDO_MAPによりファイルマッピングに失敗する
そのような場合、Groongaの管理下にないファイルのせいで「すでにファイルが存在します。」という別のエラーが発生します。そういったファイルは後始末の段階で削除すべきでした。
短時間に多数の更新を行っている状況で検索した場合にクラッシュすることがある不具合を修正しました。
[table_create] 大量に削除されたキーがDATテーブルに存在する場合、
table_createの実行に失敗する不具合を修正しました。
7.0.6リリース - 2017-08-29¶
改良¶
- 前方一致検索を複数インデックスを指定してできるようになりました。 (例
--query "Foo*" --match_columns "TITLE_INDEX_COLUMN||BODY_INDEX_COLUMN") - [window_count]
window_count関数を追加しました。検索した結果にカウントした値を追加するのに使います。検索結果をもとに分析したり、カウント結果をもとにフィルタしたりすると便利です。 - 以下のAPIを公開しました。
grn_obj_get_disk_usage()を追加。GRN_EXPR_QUERY_NO_SYNTAX_ERRORを追加。grn_expr_syntax_expand_query_by_table()を追加。grn_table_find_reference_object()を追加。
- [object_inspect] 指定したオブジェクトのディスク使用量を表示できるようになりました。
- クエリーをパースする際にフォールバックする機能をサポートしました。
QUERY_NO_SYNTAX_ERRORフラグがquery_flagsに指定されていると有効になります。(標準では無効です) このフラグが設定されていると、シンタックスエラーが発生しなくなります。例えば、"A +" というクエリーは自動的にエスケープされて "A +" という扱いになります。この振る舞いはアプリケーションがユーザーの入力をそのまま検索語句として使い、シンタックスエラーやログに記録されないようにしたい場合に便利です。 - クエリー内の語のスコアを調整できるようになりました。">", "<" と "~"がサポートされています。例えば ">Groonga" は "Groonga" のスコアをインクリメントします。"<Groonga" は "Groonga" のスコアをデクリメントします。"~Groonga" は検索結果についてマッチしたドキュメントのスコアをデクリメントします。"~" は検索結果そのものには影響しません。
- テーブルを削除するときのパフォーマンスを改善しました。
thread_limit=1する必要はありません。参照されているテーブルが存在するかチェックする処理をオブジェクトを開かなくてもできるようにしました。その結果としてパフォーマンスが改善しました。 - [httpd] バンドルしているnginxのバージョンを1.13.4に更新しました。
修正¶
感謝¶
- murata satoshi
- ryo-pinus
7.0.5リリース - 2017-07-29¶
改良¶
- [httpd] バンドルしているnginxのバージョンを1.13.3に更新しました。セキュリティーに関する修正(CVE-2017-7529)を含んでいます。
- [load] UInt64の最大値をロードできるようにしました。以前のバージョンでは意図せず0に変換されてしまっていました。
- 以下のAPIを公開しました。
grn_window_get_size()[GitHub#725] [村上さんがパッチ提供]
- [math_abs] 絶対値を計算するための
math_abs()関数を追加しました。 [GitHub#721] grn_default_logger_set_path()とgrn_default_query_logger_set_path()をスレッドセーフにしました。- [Windows] バンドルしているpcreを8.41に更新しました。
- [normalize] エラー時に冗長な空文字列が出力されないようにしました。
- [functions/time] 0除算が発生したときにエラーメッセージを出力するようにしました。 [GitHub#733] [村上さんがパッチ提供]
- [windows]
ERROR_NO_SYSTEM_RESOURCESエラーをGRN_RESOURCE_TEMPORARILY_UNAVAILABLEにマッピングするようにしました。以前はrc=-1をエラーコードとして返していました。ただし実際にどんな問題がおきたのかこれではわかりにくいので、 今回の修正ではrc=-12を返すようにしています。 - [functions/min][functions/max] ベクターカラムをサポートしました。これでカラムがスカラーなのかベクターなのか気にせず使えるようになりました。 [GitHub#735] [村上さんがパッチ提供]
- [dump]
--sort_hash_tableオプションをサポートしました。ハッシュテーブルの_keyでのソートには--sort_hash_table yesを指定します。 - [between] インデックスカラムを指定できるようになりました。 [GitHub#740] [村上さんがパッチ提供]
- [load] Apache Arrow 0.5.0 以降をサポート。
- [エラーメッセージの解析方法] エラーメッセージの解析方法のドキュメントを追加しました。
- [Debian GNU/Linux] ソースからビルドするときに必要なパッケージのリストを更新しました。
- [Ubuntu] Ubuntu 16.10(Yakkety Yak)のサポートをやめました。2017年7月20日でサポートが切れた(EOLになった)ためです。
修正¶
- テキスト型(
ShortTextなど)のベクターカラムに対するインデックスを正しく構築できるようにしました。この修正でインデックス更新後に全文検索でマッチしない問題が解決します。 [GitHub#494] - [thread_limit]
thread_limit?max=1というリクエストが同時にきたときにデッドロックが発生する問題を修正しました。 - [groonga-httpd] デフォルトのPIDのパスと再起動時に想定しているPIDのパスがあっていない問題を修正しました。そのせいで groonga-httpd の再起動に失敗していました。 [GitHub#743] [sozakiさんが報告]
感謝¶
- 村上さん
7.0.4リリース - 2017-06-29¶
改良¶
- 物理的なファイルの作成/削除のログを障害の切り分けのために記録するようにしました。 [GitHub#700,#701]
- [in_records] 固定長カラムの検索パフォーマンスを改善しました。速度が50%程度改善する可能性があります。
- [grndb]
--log-pathオプションを追加しました。 - [grndb]
--log-levelオプションを追加しました。 - 以下のAPIを公開しました。
grn_operator_to_exec_func()grn_obj_is_corrupt()
- "固定長カラム 演算子 定数" というようなクエリのパフォーマンスを改善しました。対応している演算子は
==,!=,<,>,<=と>=です。 - "カラム 演算子 値 && カラム 演算子 値 && ..." というようなクエリのパフォーマンスを改善しました。
- [grndb]
grndb checkで壊れたオブジェクトの検出をサポートしました。 - [io_flush]
--only_openedオプションをサポートしました。開いているデータベースオブジェクトのみをフラッシュすることができます。 - [grndb] 参照先のない "inspect" オブジェクトの検出と削除をサポートしました。この状態はコマンド名が
inspectからobject_inspectに変更されたことによって発生していました。
修正¶
- [rpm][centos] カスタマイズ版のビルドで意図しないマクロ展開が発生する問題を修正しました。この不具合はGroongaをSRPMからビルドする際にspecファイルの
additional_configure_optionsパラメータを使ってリビルドするときのみ発生していました。 grn_table_setoperation()のNULLチェックを追加しました。インデックスが壊れている際に、クラッシュする可能性がありました。 [GitHub#699]
感謝¶
7.0.3リリース - 2017-05-29¶
改良¶
- [select] インデックス名を指定した全文検索 のドキュメントを追加しました。
- [インデックス] どのレコードに対するポスティングリストが長すぎるのかわかるように、警告メッセージをログに出すようにしました。
- [load][dump] Apache Arrowをサポートするようにしました。 [GitHub#691]
- [cmake] 静的ライブラリとしてビルドする際に、LZ4をリンクできるようにしました。 [Sergei Golubchikさんがパッチを提供]
- [delete] キャンセルできるようにしました。
- [httpd] バンドルしているnginxのバージョンを1.13.0に更新しました。
- 以下のAPIを公開しました。
grn_plugin_proc_get_caller()を追加。
- インデックスカラムに関連した関数とセレクタを追加しました。
- 追加されたセレクタ:
index_column_df_ratio_between() - 追加された関数:
index_column_df_ratio()
- 追加されたセレクタ:
修正¶
- [delete] エラーが適切にクリアされていない不具合を修正しました。そのせいで、後続の削除処理に影響し意図しない振る舞いをしていました。
- [windows] ファイルを
O_CREATフラグ付きで開くときに、IOのバージョンが正しく検出されない不具合を修正しました。 - [vector_slice] (型のサイズが)4バイトでないベクターカラムをsliceできない不具合を修正しました。 [GitHub#695] [村上さんがパッチ提供]
- (型のサイズが)4バイトでないベクターカラムでベクターの要素をインデックスで指定するとシーケンシャルサーチでマッチしない不具合を修正しました。 [GitHub#696] [村上さんがパッチ提供]
- [logical_select]
minに月の最終日を指定すると "argument out of range" が発生する不具合を修正しました。
感謝¶
- Sergei Golubchikさん
- 村上さん
7.0.2リリース - 2017-04-29¶
改良¶
- [logical_select] drilldowns[${LABEL}].columns[${NAME}].window.sort_keys と drilldowns[${LABEL}].columns[${NAME}].window.group_keys で複数のキーを指定できるようになりました。
- [Windows] バンドルしているLZ4を1.7.5に更新しました。
- [cache] 永続化キャッシュをサポートしました。
- [log_level] 英語のドキュメントを更新しました。
- 以下のAPIを公開しました。
grn_set_default_cache_base_path()grn_get_default_cache_base_path()grn_persistent_cache_open()grn_cache_default_open()
- [
groonga --cache-base-path] 永続キャッシュを使うための新しいオプションを追加しました。 - [groonga-httpd] [groonga_cache_base_path] 永続キャッシュを使うための新しい設定を追加しました。
- [Windows] バンドルしているmsgpackを2.1.1に更新しました。
- [object_inspect] カラム情報を表示するだけでなく、インデックスカラムの統計情報も表示できるようにしました。
- 正規表現の「
.*」というパターンでインデックスを使って検索できるようになりました。 この機能はデフォルトで有効です。環境変数にGRN_SCAN_INFO_REGEXP_DOT_ASTERISK_ENABLE=noを設定すると無効化できます。 - [in_records] 既存のテーブルを条件のパターンを指定するのに使うことのできる関数を追加しました。
- [Ubuntu] EOLのため、Ubuntu 12.04のサポートをやめました。
修正¶
- [logical_select] 異なるキャッシュが使われてしまう不具合を修正しました。この問題は動的カラムを使っているときに発生していました。
- [logical_select] 動的カラムが作成されない不具合を修正しました。レコードにマッチしない場合に発生していました。
- [reindex] reindexコマンドの実行によりデータが失われてしまう不具合を修正しました。
- [httpd] 別のユーザーでワーカーを動かしている時、 quit と shutdown のレスポンスが壊れている問題を修正しました。 [GitHub ranguba/groonga-client#12]
7.0.1リリース - 2017-03-29¶
改良¶
- 以下のAPIを公開しました。
- grn_ii_cursor_next_pos()
- grn_table_apply_expr()
- grn_obj_is_data_column()
- grn_obj_is_expr()
- grn_obj_is_scalar_column()
- [column_copy] 参照型のベクタのダンプをサポートしました。
- [load]
array<object>スタイルの重み付きベクターカラムのloadをサポートしました。array<object>の例:[{"key1": weight1}, {"key2": weight2}] - インデックスを使った
!(XXX OPERATOR VALUE)の検索をサポートしました。演算子として>だけでなく、>=、<、<=、==や!=も使えます。 - インデックスを使って
!(column == CONSTANT)を検索できるようになりました。例えば!(column == 29)などです。 !の最適化を以下のパターンでサポートしました。!(column @ "X") && (column @ "Y")(column @ "Y") && !(column @ "X")(column @ "Y") &! !(column @ "X")
XXX || !(column @ "xxx")をインデックスを使って検索できるようになりました。- [dump]
'{"x": 1, "y": 2}'というスタイルを参照されていない重み付きベクターカラムで使うようにしました。この変更は古いGroongaには影響しません。もともとサポートされているからです。 - [実験的]
GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE環境変数をサポートしました。この変数はクエリの最適化を予想されるヒット件数に応じて行うかどうかを切り替えるのに使用します。この機能はデフォルトでは無効です。有効にするにはGRN_ORDER_BY_ESTIMATED_SIZE_ENABLE=yesを指定します。 - [select]
columnsやdrilldownの評価結果をクエリログに追加するようにしました。 - [select]
drilldownのクエリログのフォーマットを変更しました。これは非互換な変更ですが、クエリログを変換するようなプログラムを独自に開発しているユーザー以外には影響ありません。 - [table_remove] 一時的なメモリ使用量を削減しました。スレッドの最大数が0のときに有効になります。
- [select]
columns[LABEL](N)がクエリログのフォーマットとして使われます。以前はcolumns(N)[LABEL]でした。 - [クエリ拡張] ベクターカラムを使った推奨例に更新しました。[ぐるなびさんが報告]
- ロック中にリクエストがキャンセルされたことを検出できるようにしました。これは
request_cancelがロック中に意図せず無視されないようにします。 - [logical_select]
initialおよびfiltered動的カラムをサポートしました。使用例は--columns[LABEL].stage initialや--columns[LABEL].stage filteredです。 - [logical_select]
match_columnsやquery、drilldown_filterオプションをサポートしました。 - [highlight_html] 類似文書検索をサポートしました。
- [logical_select]
initialおよびfiltered動的カラムをサポートしました。使用例は--columns[LABEL].stage initialや--columns[LABEL].stage filteredです。 - [logical_select] 動的カラムでウィンドウ関数をサポートしました。
- [select] 動的カラムに関するドキュメントを追加しました。
- [ウィンドウ関数] ウィンドウ関数のセクションをドキュメントに追加しました。
- [CentOS] EOLのため、CentOS 5のサポートをやめました。
- [httpd] バンドルしているnginxのバージョンを1.11.12に更新しました。
- ANDでのマッチ最適化を環境変数で無効化できるようにしました。この機能は
GRN_TABLE_SELECT_AND_MIN_SKIP_ENABLE=noを設定することで無効化できます。デフォルトでは有効になっています。 - [vector_new] 新規ベクターを作成するための関数を追加しました。
- [select]
drilldown_filterのドキュメントを追加しました。
修正¶
- [lock_clear] テンポラリデータベースに対して実行するとクラッシュする不具合を修正しました。
- 自然言語に対する動的インデックス更新でインデックスサイズが肥大化する問題を修正しました。Groonga 6.1.4から発生していました。
- [select] "A && B.C @ X" というクエリでマッチすべきレコードを返さないことがある不具合を修正しました。
grn_io_flush()とgrn_io_expire()がコンフリクトする問題を修正しました。この修正がないと、io_flushとloadが同時に特定のタイミングで実行されるとクラッシュする不具合がありました。- [logical_table_remove] 最大スレッド数が1のときにクラッシュする不具合を修正しました。
感謝¶
- 株式会社ぐるなびさん
7.0.0リリース - 2017-02-09¶
改良¶
- [in_values] 参照型ベクターカラムのシーケンシャルサーチに対応しました。 [GitHub#629] [村上さんがパッチ提供]
- [select] 誤った
drilldown[LABEL].sort_keysが指定されたとき、無視するのではなく、エラーを報告するようにしました。 - [select] DBのメタデータを不必要に更新しないようにしました。
selectコマンドを使っているだけなのにDBにロックがかかったままになってしまうのを防ぎます。 - [lock_clear]
lock_clearでDBのメタデータに対するロックも削除できるようにしました。 - [CentOS] GroongaをAmazon LinuxでもインストールできるようにEPELをデフォルトで有効にするようにしました。
- [query]
default_modeオプションで "@X" スタイルのエイリアスが使えるようになりました。 - [query] 動作モードのリストに関するドキュメントを更新しました。動作モードの既定値は
MATCH("@") で全文検索を実行します。 - [rpm][centos] CentOS 7で groonga-token-filter-stem パッケージを提供するようにしました。 ステミングに対応するための
TokenFilterStemトークンフィルターを提供します。 [GitHub#633] [Tim Bellefleurさんが報告] - [window_record_number]
record_numberが非推奨になりました。代わりにwindow_record_numberを使ってください。record_numberは互換性のためだけに残っています。 - [window_sum]
window_sumウィンドウ関数を追加しました。PostgreSQLのsum()と同様のウィンドウ関数を提供します。 TABLE_DAT_KEYテーブルをインメモリで使ったときに静的インデックス構築をできるようにしました。 [GitHub#623] [村上さんが報告]- バンドルしている鬼雲を6.1.1へと更新しました。
columns[LABEL].window.group_keysをサポートしました。ウィンドウ関数をグループごとに提供することができます。- [load] 誤ったキーが指定されていたときにエラーを報告するようにしました。キーの型が異なっている場合でも気付けるようになります。
- [load]
--output_errors yesオプションをサポートしました。"yes"を指定すると、どのレコードのloadに失敗したのかエラーを取得できるようになります。この機能を使う場合には、コマンドバージョン3を指定します。 - [load] キーのキャストに失敗したときのエラーメッセージをわかりやすくしました。以前は単に "cast failed" と表示していましたが、テーブルのキーの型とキャスト対象となるキーの型もメッセージに含まれるようになりました。
- [httpd] バンドルしているnginxのバージョンを1.11.9に更新しました。
修正¶
- 存在しないソートキーを
drilldowns[LABEL]やslices[LABEL]に指定するとJSONパースエラーとなる不具合を修正しました。 [GitHub#627] [村上さんがパッチ提供] - 存在しないグループのサブレコードにアクセスしようとするとクラッシュする不具合を修正しました。例えば、
drilldowns[LABEL].sort_keys _sumをcalc_typesの指定なしに使っていた場合に問題が発生していました。 [GitHub#625] [村上さんがパッチ提供] - tokenizerでエラーが発生するとクラッシュする不具合を修正しました。tokenizer と token filterを登録していて、tokenizer にエラーがあると発生していました。
- [window_record_number] ウィンドウ関数の引数が正しく渡されていない不具合を修正しました。 [GitHub#634] [村上さんがパッチ提供]
感謝¶
- 村上さん
- aomi-nさん
古いリリース¶
- News - 6.x
- 6.1.5リリース - 2017-01-23
- 6.1.4リリース - 2017-01-18
- 6.1.3リリース - 2017-01-06
- 6.1.2リリース - 2016-12-31
- 6.1.1リリース - 2016-11-29
- 6.1.0リリース - 2016-10-29
- 6.0.9リリース - 2016-09-29
- 6.0.8リリース - 2016-08-29
- 6.0.7リリース - 2016-07-29
- 6.0.5リリース - 2016-06-29
- 6.0.4リリース - 2016-06-06
- 6.0.3リリース - 2016-05-29
- 6.0.2リリース - 2016-04-29
- 6.0.1リリース - 2016-03-29
- 6.0.0リリース - 2016-02-29
- News - 5.x
- News - 4.x
- News - 3.x
- News - 2.x
- News - 1.3.x
- News - 1.2.x
- バージョン1.1.xのお知らせ
- バージョン1.0.xのお知らせ
- バージョン0.xのお知らせ
- News in Senna period