お知らせ - 13系#

13.1.1リリース - 2024-01-09#

改良#

  • mingw32のサポートをやめました。 [GitHub#1654]

  • --match_columns--query を使った "vector_column[N] OPERATOR literal" でインデックスを使った検索をサポートしました。

修正#

  • [Windows] groonga-normalizer-mysql をバンドルしました。 [GitHub#1655]

    Windows版のGroonga 13.1.0に groonga-normalizer-mysql が含まれていませんでした。 この問題はGroonga13.1.0でのみ発生します。

13.1.0リリース - 2023-12-26#

改良#

  • [select] トレースログもキャッシュするようにしました。

  • Apache Arrow フォーマットの応答で dict<string> の出力をサポートしました。

  • [Groonga HTTPサーバー] 新しい content type application/vnd.apache.arrow.stream をサポートしました。

  • [query] 以下のような空の入力をサポートしました。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    
    table_create Lexicon TABLE_HASH_KEY ShortText   --default_tokenizer TokenBigramSplitSymbolAlphaDigit   --normalizer NormalizerAuto
    column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name
    load --table Users
    [
    {"name": "Alice"},
    {"name": "Alisa"},
    {"name": "Bob"}
    ]
    
    select Users   --output_columns name,_score   --filter 'query("name", "  	")'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            0
          ],
          [
            [
              "name",
              "ShortText"
            ],
            [
              "_score",
              "Int32"
            ]
          ]
        ]
      ]
    ]
    
  • BFloat16をサポートしました。(実験的)

    BFloat16のloadとselectができるだけです。 bfloat16_value - 1.2 のような算術演算はできません。

  • [column_create] 新しいフラグ WEIGHT_BFLOAT16 を追加しました。

修正#

  • [select] Groonga が output_pretty=yes の結果をキャッシュした場合、 output_pretty をつけていないクエリーであっても、output_prettyをつけて返してしまう問題を修正しました。

  • 誤ったデータを作り出してしまう問題を修正しました。

    通常、ユーザーはこれを明示的に実行できません。数値の動的カラムや一時結果セットが作られたとき、あるいは使われているときに内部的に発生することがあります。

    例えば、以下のクエリーで誤ったデータを作り出すことがあります。

    select TABLE \
      --match_columns TEXT_COLUMN \
      --query 'A B OR C' \
      --columns[NUMERIC_DYNAMIC_COLUMN].stage result_set \
      --columns[NUMERIC_DYNAMIC_COLUMN].type Float32 \
      --columns[NUMERIC_DYNAMIC_COLUMN].flags COLUMN_VECTOR
    

    もしこの問題が起こった場合は、NUMERIC_DYNAMIC_COLUMN は多くのごみ要素を含んでいます。そして、それは多くのメモリー消費の原因にもなります。

    この問題はスタック上の未初期化の変数が原因です。そのため、発生するかもしれないし、しないかもしれないことに注意してください。

  • 有効な normalizers/token_filters の設定が失敗することがある問題を修正しました。

  • [fuzzy_search] 以下の3つの条件が成立した時にクラッシュする問題を修正しました。

    1. クエリーが2つまたはそれ以上のマルチバイト文字を持っている場合。

    2. ${ASCII}${ASCII}${MULTIBYTE}* という形の文字列がパトリシアトライのテーブルにある場合。

    3. WITH_TRANSPOSITION が有効な場合。

    例えば、以下のようにパトリシアトライのテーブル内にある"aaあ"とクエリー"あああ"のペアは問題を起こします。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    
    table_create Names TABLE_PAT_KEY ShortText
    column_create Names user COLUMN_INDEX Users name
    load --table Users
    [
    {"name": "aaあ"},
    {"name": "あうi"},
    {"name": "あう"},
    {"name": "あi"},
    {"name": "iう"}
    ]
    select Users
      --filter 'fuzzy_search(name, "あiう", {"with_transposition": true, "max_distance": 3})'
      --output_columns 'name, _score'
      --match_escalation_threshold -1
    

13.0.9リリース - 2023-10-29#

改良#

  • [select] --fuzzy_max_expansions のデフォルト値を0から10に変更しました。

    --fuzzy_max_expansions を使うことで検索に使う編集距離の近い語の数を制限できます。この引数を使って、ヒット数と検索パフォーマンスのバランスを取ることができます。--fuzzy_max_expansions が0の場合は語彙表にある編集距離が --fuzzy_max_distance 以下の語すべてを使って検索をします。

    ただ、 --fuzzy_max_expansions が0の場合、検索が遅くなる可能性があります。したがって、今回のリリースから --fuzzy_max_expansions のデフォルト値を10に変更しました。

  • [select] select コマンドの引数に新しく --fuzzy_with_transposition を追加しました。(実験的)

    この引数を使うことで「隣接する文字の交換」の編集距離を1または2に指定できます。

    --fuzzy_with_transpositionyes の場合、文字の交換の編集距離は 1 になります。それ以外の値が指定された場合は、文字の交換の編集距離は 2 になります。

  • [select] select の引数に新しく --fuzzy_tokenize を追加しました。(実験的)

    --fuzzy_tokenizeyes の時、 Groongaは、誤字を許容する検索で --default_tokenizer で指定したトークナイザーを使います。

    --fuzzy_tokenize のデフォルト値は noです。 --fuzzy_tokenize が有用なケースは、以下のケースです。

    • 検索対象が日本語のデータのみ。

    • --default_tokenizerTokenMecab を指定する。

  • [load] input_typeapache-arrow のときも --ifexists が使えるようになりました。

  • [ノーマライザー] NormalizerNFKC* に新しく remove_blank_force オプションを追加しました。

    remove_blank_forcefalse の時、以下のようにノーマライザーは空白を無視しません。

    table_create Entries TABLE_NO_KEY
    column_create Entries body COLUMN_SCALAR ShortText
    
    load --table Entries
    [
    {"body": "Groonga はとても速い"},
    {"body": "Groongaはとても速い"}
    ]
    
    select Entries --output_columns \
      'highlight(body, \
        "gaはとても", "<keyword>", "</keyword>", \
        {"normalizers": "NormalizerNFKC150(\\"remove_blank_force\\", false)"} \
      )'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            2
          ],
          [
            [
              "highlight",
              null
            ]
          ],
          [
            "Groonga はとても速い"
          ],
          [
            "Groon<keyword>gaはとても</keyword>速い"
          ]
        ]
      ]
    ]
    
  • [select] select コマンドの引数に新しく --output_trace_log を追加しました。(実験的)

    --output_trace_logyes を指定し --command_version 3 を指定した場合、Groongaは以下のようなログを新規に出力します。

    table_create Memos TABLE_NO_KEY
    column_create Memos content COLUMN_SCALAR ShortText
    
    table_create Lexicon TABLE_PAT_KEY ShortText   --default_tokenizer TokenNgram   --normalizer NormalizerNFKC150
    column_create Lexicon memos_content   COLUMN_INDEX|WITH_POSITION Memos content
    
    load --table Memos
    [
    {"content": "This is a pen"},
    {"content": "That is a pen"},
    {"content": "They are pens"}
    ]
    
    select Memos \
      --match_columns content \
      --query "Thas OR ere" \
      --fuzzy_max_distance 1 \
      --output_columns *,_score \
      --command_version 3 \
      --output_trace_log yes \
    --output_type apache-arrow
    
    return_code: int32
    start_time: timestamp[ns]
    elapsed_time: double
    error_message: string
    error_file: string
    error_line: uint32
    error_function: string
    error_input_file: string
    error_input_line: int32
    error_input_command: string
    -- metadata --
    GROONGA:data_type: metadata
    	return_code	               start_time	elapsed_time	error_message	error_file	error_line	error_function	error_input_file	error_input_line	error_input_command
    0	          0	1970-01-01T09:00:00+09:00	    0.000000	       (null)	    (null)	    (null)	        (null)	          (null)	          (null)	             (null)
    ========================================
    depth: uint16
    sequence: uint16
    name: string
    value: dense_union<0: uint32=0, 1: string=1>
    elapsed_time: uint64
    -- metadata --
    GROONGA:data_type: trace_log
    	depth	sequence	name	value	elapsed_time
     0	    1	       0	ii.select.input	Thas 	           0
     1	    2	       0	ii.select.exact.n_hits	    0	           1
     2	    2	       0	ii.select.fuzzy.input	Thas 	           2
     3	    2	       1	ii.select.fuzzy.input.actual	that 	           3
     4	    2	       2	ii.select.fuzzy.input.actual	this 	           4
     5	    2	       3	ii.select.fuzzy.n_hits	    2	           5
     6	    1	       1	ii.select.n_hits	    2	           6
     7	    1	       0	ii.select.input	ere  	           7
     8	    2	       0	ii.select.exact.n_hits	    2	           8
     9	    1	       1	ii.select.n_hits	    2	           9
    ========================================
    content: string
    _score: double
    -- metadata --
    GROONGA:n_hits: 2
    	content	    _score
    0	This is a pen	  1.000000
    1	That is a pen	  1.000000
    

    --output_trace_log は、コマンドバージョン3でのみ有効です。

    以下のケースで有用です。:

    • 誤字を許容する検索で使われた実際のキーワードの検知。

    • クエリーログを見ずに実行時間を測定。

  • [query] オブジェクトリテラルをサポートしました。

  • [query_expand] NPPONPP をサポートしました(実験的)。

  • [snippet] normalizers オプションをサポートしました。

    オプション付きのノーマライザーが使えるようになります。例えば、以下のように snippet() 関数内でスペースを無視したくない時にこのオプションを使います。

    table_create Entries TABLE_NO_KEY
    column_create Entries content COLUMN_SCALAR ShortText
    
    load --table Entries
    [
    {"content": "Groonga and MySQL"},
    {"content": "Groonga and My SQL"}
    ]
    
    select Entries \
      --output_columns \
        '   snippet(content,   "MySQL", "<keyword>", "</keyword>",   {"normalizers": "NormalizerNFKC150(\\"remove_blank_force\\", false)"}   )'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            2
          ],
          [
            [
              "snippet",
              null
            ]
          ],
          [
            [
              "Groonga and <keyword>MySQL</keyword>"
            ]
          ],
          [
            null
          ]
        ]
      ]
    ]
    

修正#

  • Time OPERATOR Float{,32} が正しく評価されない問題を修正しました。 GH-1624[Reported by yssrku]

    Float{,32} 内のマイクロ秒(秒未満の小さい値)が使えていませんでした。この問題は Time OPERATOR Float{,32} の時だけ発生します。

    以下のように、 load --ifexists 'A OP B || C OP D' でこの問題は発生します。

    table_create Reports TABLE_HASH_KEY ShortText
    column_create Reports content COLUMN_SCALAR Text
    column_create Reports modified_at COLUMN_SCALAR Time
    
    load --table Reports
    [
    {"_key": "a", "content": "", "modified_at": 1663989875.438}
    ]
    
    load \
      --table Reports \
      --ifexists 'content == "" && modified_at <= 1663989875.437'
    

    しかし、 select --filter では発生しません。

  • alnum(a-zA-Z0-9) + blank が検知されることがある問題を修正しました。

    aba b のように複数の空白を含むテキストがマッチする場合、 a bが検知されますが、このケースでは検知すべきではありません。

    例えば、この問題が発生すると、以下のように a i を検知してしまいます。

    table_create Entries TABLE_NO_KEY
    column_create Entries body COLUMN_SCALAR ShortText
    
    load --table Entries
    [
    {"body": "Groonga is fast"}
    ]
    
    select Entries \
      --output_columns 'highlight(body, "ai", "<keyword>", "</keyword>")'
    
    [
      [
        0,0.0,0.0
      ],
      [
        [
          [
            1
          ],
          [
            [
              "highlight",
              null
            ]
          ],
          [
            "Groong<keyword>a i</keyword>s fast"
          ]
        ]
      ]
    ]
    

    しかし、上記の結果は期待していない結果です。上記ケースでは a i は検知してほしくありません。

感謝#

  • yssrku

13.0.8リリース - 2023-09-29#

改良#

  • [column_create] column_create に新しいフラグ COLUMN_FILTER_SHUFFLE, COLUMN_FILTER_BYTE_DELTA, COMPRESS_FILTER_TRUNCATE_PRECISION_1BYTE, and COMPRESS_FILTER_TRUNCATE_PRECISION_2BYTES を追加しました。

  • 新しくBloscをバンドルしました。

    COLUMN_FILTER_SHUFFLE, COLUMN_FILTER_BYTE_DELTA, COMPRESS_FILTER_TRUNCATE_PRECISION_1BYTE, COMPRESS_FILTER_TRUNCATE_PRECISION_2BYTESフラグがBloscを要求します。

  • [status] status コマンドの出力に新しく "blosc" を追加しました。

  • [groonga 実行ファイル] groonga --version の出力に新しく blosc を追加しました。

  • [select] select の引数に新しく --fuzzy_max_distance を追加しました。(実験的)

  • [select] select コマンドの引数に新しく --fuzzy_max_expansions を追加しました。(実験的)

  • [select] select コマンドの引数に新しく --fuzzy_max_distance_ratio を追加しました。(実験的)

  • [select] select コマンドの引数に新しく --fuzzy_prefix_length を追加しました。(実験的)

  • [cast] "[0.0, 1.0, 1.1, ...]"Float/Float32 のベクターへキャストできるようにしました。

  • [fuzzy_search] max_expansion オプションの名前を max_expansions に変更しました。

    max_expansion option はこのリリースから非推奨になりますが、後方互換性を維持するために引き続き使えるようにしています。

  • master ブランチの名前を main に変更しました。

  • [RPM] CMakeを使ってビルドするようにしました。

  • [Debian] Debian trixie をサポートしました。

修正#

  • [fuzzy_search] ヒットしないはずのレコードがヒットすることがある問題を修正しました。

  • [近傍フレーズ検索条件][近傍フレーズ検索演算子] 以下のように、最初のフレーズグループに何もマッチしない時にGroongaがクラッシュする問題を修正しました。

    table_create Entries TABLE_NO_KEY
    column_create Entries content COLUMN_SCALAR Text
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenNgram \
      --normalizer NormalizerNFKC121
    column_create Terms entries_content COLUMN_INDEX|WITH_POSITION \
      Entries content
    load --table Entries
    [
    {"content": "x y z"}
    ]
    select Entries \
      --match_columns Terms.entries_content.content \
      --query '*NPP1"(NONEXISTENT) (z)"' \
      --output_columns '_score, content'
    

13.0.7リリース - 2023-09-12#

修正#

  • [normalize] normalize コマンドで最後の offsettype が表示されない問題を修正しました。

    normalize コマンドは以下のようにノーマライズ後の文字のオフセットとタイプを表示できますが、最後のoffsettypeが表示されていませんでした。

    table_create Normalizations TABLE_PAT_KEY ShortText
    column_create Normalizations normalized COLUMN_SCALAR ShortText
    load --table Normalizations
    [
    {"_key": "あ", "normalized": "<あ>"}
    ]
    
    normalize   'NormalizerNFKC130("unify_kana", true, "report_source_offset", true),    NormalizerTable("normalized", "Normalizations.normalized",                    "report_source_offset", true)'   "お あ a ア i ア オ"   REMOVE_BLANK|WITH_TYPES|WITH_CHECKS
    [
      [
        0,
        0.0,
        0.0
      ],
      {
        "normalized": "お<あ>a<あ>i<あ>お",
        "types": [
          "hiragana",
          "symbol",
          "hiragana",
          "symbol",
          "alpha",
          "symbol",
          "hiragana",
          "symbol",
          "alpha",
          "symbol",
          "hiragana",
          "symbol",
          "hiragana"
        ],
        "checks": [
          3,
          0,
          0,
          4,
          -1,
          0,
          0,
          -1,
          4,
          4,
          -1,
          0,
          0,
          -1,
          4,
          4,
          -1,
          0,
          0,
          -1,
          4,
          0,
          0
        ],
        "offsets": [
          0,
          4,
          4,
          4,
          8,
          12,
          12,
          12,
          16,
          20,
          20,
          20,
          24
        ]
      }
    ]
    
  • [ノーマライザー] 複数のノーマライザーを使用した時に最後の文字のオフセットが不正になることがある問題を修正しました。

    例えば以下の例では、最後のオフセットは27が正しいですが、以下の例ではこの問題が原因で17になっています。

    table_create Normalizations TABLE_PAT_KEY ShortText
    column_create Normalizations normalized COLUMN_SCALAR ShortText
    load --table Normalizations
    [
    {"_key": "あ", "normalized": "<あ>"}
    ]
    
    normalize   'NormalizerNFKC130("unify_kana", true, "report_source_offset", true),    NormalizerTable("normalized", "Normalizations.normalized",                    "report_source_offset", true)'   "お あ a ア i ア オ"   REMOVE_BLANK|WITH_TYPES|WITH_CHECKS
    [
      [
        0,
        0.0,
        0.0
      ],
      {
        "normalized": "お<あ>a<あ>i<あ>お",
        "types": [
          "hiragana",
          "symbol",
          "hiragana",
          "symbol",
          "alpha",
          "symbol",
          "hiragana",
          "symbol",
          "alpha",
          "symbol",
          "hiragana",
          "symbol",
          "hiragana",
          "null"
        ],
        "checks": [
          3,
          0,
          0,
          4,
          -1,
          0,
          0,
          -1,
          4,
          4,
          -1,
          0,
          0,
          -1,
          4,
          4,
          -1,
          0,
          0,
          -1,
          4,
          0,
          0
        ],
        "offsets": [
          0,
          4,
          4,
          4,
          8,
          12,
          12,
          12,
          16,
          20,
          20,
          20,
          24,
          17
        ]
      }
    ]
    

13.0.6リリース - 2023-08-31#

改良#

  • [highlight_html] 以下のように highlight_html() に空文字列を指定してもエラーを報告しなくなりました。

    highlight_html() は空のテキストを返します。

    table_create Entries TABLE_NO_KEY
    column_create Entries body COLUMN_SCALAR ShortText
    
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer 'TokenNgram("report_source_location", true)' \
      --normalizer 'NormalizerNFKC150'
    column_create Terms document_index COLUMN_INDEX|WITH_POSITION Entries body
    
    load --table Entries
    [
    {"body": "ab cd ed gh"}
    ]
    
    select Entries \
      --match_columns body \
      --query 'ab' \
      --output_columns 'highlight_html("", Terms)'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            1
          ],
          [
            [
              "highlight_html",null
            ]
          ],
          [
            ""
          ]
        ]
      ]
    ]
    
  • 動的カラムや疑似カラムを対象に aggregator_* を使えるようになりました。

    疑似カラムとは、 _ で始まるカラムのことです。(例: _id, _nsubrecs, ...)

修正#

  • [CMake] msgpack と msgpackc-cxx の両方がインストールされている環境でCMakeによるビルドが失敗する問題を修正しました。

    詳細については、 groonga/groonga#1601 のコメントを参照してください。

  • x OR <0.0yQUERY_NO_SYNTAX_ERROR を使った時に式を正しくパースできない問題を修正しました。

    マッチするはずのレコードがマッチしなくなることがあります。

    例えば、以下のようなクエリーを実行した場合、{"_key": "name yyy"} はマッチするはずですが、マッチしません。

    table_create Names TABLE_PAT_KEY ShortText
    table_create Tokens TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenBigram \
      --normalizer NormalizerAuto
    column_create Tokens names_key COLUMN_INDEX|WITH_POSITION Names _key
    
    load --table Names
    [
    {"_key": "name yyy"}
    ]
    
    select Names \
      --match_columns "_key" \
      --query "xxx OR <0.0yyy" \
      --query_flags ALLOW_PRAGMA|ALLOW_COLUMN|QUERY_NO_SYNTAX_ERROR
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            0
          ],
          [
            [
              "_id",
              "UInt32"
            ],
            [
              "_key",
              "ShortText"
            ]
          ]
        ]
      ]
    ]
    
  • [highlight_html] ハイライト位置が正しくないことがある問題を修正しました。

    例えば、ハイライト対象に文字数が1のキーワードと文字数が2のキーワードを両方指定した時に発生します。

13.0.5リリース - 2023-08-02#

修正#

  • インデックス構築に失敗することがある問題を修正しました。

    この問題は、Groonga v13.0.2, v13.0.3, v13.0.4 に存在します。したがって、これらのバージョンを使用している場合は、 Groonga v13.0.5 以降を使用することを強くおすすめします。

  • [近傍フレーズ検索条件][近傍フレーズ検索演算子] 各近傍フレーズ検索で、無効なシンタックスのクエリーを指定した時にGroongaがクラッシュすることがある問題を修正しました。

    例えば、以下のケースでは本来エラーになるべきですが、この問題があるとクラッシュします。("--query"の値に閉じカッコが一つ多い点に着目してください。)

    table_create Entries TABLE_NO_KEY
    [[0,0.0,0.0],true]
    column_create Entries content COLUMN_SCALAR Text
    [[0,0.0,0.0],true]
    table_create Terms TABLE_PAT_KEY ShortText   --default_tokenizer TokenNgram   --normalizer NormalizerNFKC121
    [[0,0.0,0.0],true]
    column_create Terms entries_content COLUMN_INDEX|WITH_POSITION Entries content
    [[0,0.0,0.0],true]
    load --table Entries
    [
    {"content": "a b c"}
    ]
    [[0,0.0,0.0],1]
    select Entries   --match_columns content   --query '*NPP2"(a b))"'   --output_columns '_score, content'
    

13.0.4リリース - 2023-07-26#

改良#

  • [Windows] 32-bit版パッケージの提供をやめました。

修正#

  • [Debian GNU/Linux] [Ubuntu] QueryExpanderTSVのデフォルトの設定ファイルのパスを修正しました。

  • [CMake] CMake 3.16または3.17を使っている場合にエラーになることがある問題を修正しました。

13.0.3リリース - 2023-07-24#

改良#

  • [groonga-httpd] groonga-nginxに切り出されました。groonga-httpdパッケージの提供をやめました。

    Debian GNU/Linux 12以降あるいはUbuntu 23.10以降のユーザーはデフォルトのnginxパッケージと一緒に使えるlibnginx-mod-http-groongaパッケージを使ってください。詳細はgroonga-nginxのREADMEを参照してください。

    古いDebian/UbuntuまたはRHEL関連ディストリビューションのユーザーはgroonga-httpd相当のパッケージを使うことはできません。代わりにGroonga HTTPサーバーを使うことができます。もし、Groonga HTTPサーバーがあなたのユースケースでは適切ではない場合、あなたのユースケース付きでDiscussionsに報告してください。

  • [Ubuntu] Ubuntu 23.10(Mantic Minotaur)をサポートしました。

  • [Debian GNU/Linux] xxHashサポートを有効にしました。

  • [Ubuntu] xxHashサポートを有効にしました。

修正#

  • ソースアーカイブがCMakeでビルドできない問題を修正しました。

13.0.2リリース - 2023-07-12#

改良#

  • [Ubuntu] Ubuntu 18.04(Bionic Beaver)のサポートをやめました。

  • [Ubuntu] Ubuntu 23.04(Lunar Lobster)をサポートしました。

  • [Debian GNU/Linux] Debian 12 (bookworm) をサポートしました。

  • [Oracle Linux] Oracle Linuxサポートをやめました。代わりに AlmaLinux 用パッケージを使ってください。

  • [grn_highlighter] タグの変更をサポートしました。

    GH-1453 [askdkcさんが報告]

  • [grn_highlighter] ノーマライザーの変更をサポートしました。

  • [grn_highlighter] HTMLモードの変更をサポートしました。

  • [grn_highlighter] 複数タグをサポートしました。

  • [highlight] sequential_class_tag_mode オプションを追加しました。

  • [highlight_html] sequential_class_tag_mode オプションを追加しました。

  • [reference_acquire] --recursive dependent が使われたときに対象オブジェクト用のインデックスカラムも参照するように変更しました。

    対象オブジェクトがカラムの場合、そのカラム用のインデックスカラムも参照されます。

    対象オブジェクトがテーブルの場合、そのテーブル用のインデックスカラムも参照されます。

    対象オブジェクトがDBの場合、すべてのテーブルが対象オブジェクトになります。

  • [CMake] CMake 3.16以降を必須としました。近い将来、GNU AutotoolsではなくCMakeを推奨ビルドツールとし、いずれGNU Autotoolsサポートをやめる予定です。

  • [CMake] CMakeパッケージに対応しました。 find_package(Groonga) というように使えます。

  • [Packaging] ソースアーカイブ中の configure を生成しているGNU Autotoolsを更新しました。

    [ranguba/rroonga#220 <https://github.com/ranguba/rroonga/issues/220>_] [ZangRuochenさんが報告]

  • [reference_acquire] 組み込みオブジェクト用のリファレンスカウント実装を最適化しました。

  • SIGABRT 発生時もバックトレースのログ出力するようにしました。

修正#

感謝#

  • askdkcさん

  • Dylan Golowさん

  • ZangRuochenさん

13.0.1リリース - 2023-03-24#

改良#

  • [highlight_html] 前方一致検索をサポートしました。

    highlight_html で前方一致検索ができるようになりました。

    ただし、ハイライトするキーワードは、最初の出現箇所だけでなく、途中および最後の出現箇所もハイライトされます。

    table_create Tags TABLE_NO_KEY
    column_create Tags name COLUMN_SCALAR ShortText
    
    table_create Terms TABLE_PAT_KEY ShortText \
      --normalizer 'NormalizerNFKC150'
    column_create Terms tags_name COLUMN_INDEX Tags name
    
    load --table Tags
    [
    {"name": "Groonga"}
    ]
    
    select Tags \
      --query "name:^g" \
      --output_columns "highlight_html(name)"
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "highlight_html",
    #           null
    #         ]
    #       ],
    #       [
    #         "<span class=\"keyword\">G</span>roon<span class=\"keyword\">g</span>a"
    #       ]
    #     ]
    #   ]
    # ]
    
  • [ノーマライザー] NormalizerNFKC* に新しいオプションを追加しました。

    • unify_kana_prolonged_sound_mark

      このオプションによって、長音記号を以下のように正規化できます。

      ァー -> ァア, アー -> アア, ヵー -> ヵア, カー -> カア, ガー -> ガア, サー -> サア, ザー -> ザア,
      ター -> タア, ダー -> ダア, ナー -> ナア, ハー -> ハア, バー -> バア, パー -> パア, マー -> マア,
      ャー -> ャア, ヤー -> ヤア, ラー -> ラア, ヮー -> ヮア, ワー -> ワア, ヷー -> ヷア,
      
      ィー -> ィイ, イー -> イイ, キー -> キイ, ギー -> ギイ, シー -> シイ, ジー -> ジイ, チー -> チイ,
      ヂー -> ヂイ, ニー -> ニイ, ヒー -> ヒイ, ビー -> ビイ, ピー -> ピイ, ミー -> ミイ, リー -> リイ,
      ヰー -> ヰイ, ヸー -> ヸイ,
      
      ゥー -> ゥウ, ウー -> ウウ, クー -> クウ, グー -> グウ, スー -> スウ, ズー -> ズウ, ツー -> ツウ,
      ヅー -> ヅウ, ヌー -> ヌウ, フー -> フウ, ブー -> ブウ, プー -> プウ, ムー -> ムウ, ュー -> ュウ,
      ユー -> ユウ, ルー -> ルウ, ヱー -> ヱウ, ヴー -> ヴウ,
      
      ェー -> ェエ, エー -> エエ, ヶー -> ヶエ, ケー -> ケエ, ゲー -> ゲエ, セー -> セエ, ゼー -> ゼエ,
      テー -> テエ, デー -> デエ, ネー -> ネエ, ヘー -> ヘエ, ベー -> ベエ, ペー -> ペエ, メー -> メエ,
      レー -> レエ, ヹー -> ヹエ,
      
      ォー -> ォオ, オー -> オオ, コー -> コオ, ゴー -> ゴオ, ソー -> ソオ, ゾー -> ゾオ, トー -> トオ,
      ドー -> ドオ, ノー -> ノオ, ホー -> ホオ, ボー -> ボオ, ポー -> ポオ, モー -> モオ, ョー -> ョオ,
      ヨー -> ヨオ, ロー -> ロオ, ヲー -> ヲオ, ヺー -> ヺオ,
      
      ンー -> ンン
      
      ぁー -> ぁあ, あー -> ああ, ゕー -> ゕあ, かー -> かあ, がー -> があ, さー -> さあ, ざー -> ざあ,
      たー -> たあ, だー -> だあ, なー -> なあ, はー -> はあ, ばー -> ばあ, ぱー -> ぱあ, まー -> まあ,
      ゃー -> ゃあ, やー -> やあ, らー -> らあ, ゎー -> ゎあ, わー -> わあ
      
      ぃー -> ぃい, いー -> いい, きー -> きい, ぎー -> ぎい, しー -> しい, じー -> じい, ちー -> ちい,
      ぢー -> ぢい, にー -> にい, ひー -> ひい, びー -> びい, ぴー -> ぴい, みー -> みい, りー -> りい,
      ゐー -> ゐい
      
      ぅー -> ぅう, うー -> うう, くー -> くう, ぐー -> ぐう, すー -> すう, ずー -> ずう, つー -> つう,
      づー -> づう, ぬー -> ぬう, ふー -> ふう, ぶー -> ぶう, ぷー -> ぷう, むー -> むう, ゅー -> ゅう,
      ゆー -> ゆう, るー -> るう, ゑー -> ゑう, ゔー -> ゔう
      
      ぇー -> ぇえ, えー -> ええ, ゖー -> ゖえ, けー -> けえ, げー -> げえ, せー -> せえ, ぜー -> ぜえ,
      てー -> てえ, でー -> でえ, ねー -> ねえ, へー -> へえ, べー -> べえ, ぺー -> ぺえ, めー -> めえ,
      れー -> れえ
      
      ぉー -> ぉお, おー -> おお, こー -> こお, ごー -> ごお, そー -> そお, ぞー -> ぞお, とー -> とお,
      どー -> どお, のー -> のお, ほー -> ほお, ぼー -> ぼお, ぽー -> ぽお, もー -> もお, ょー -> ょお,
      よー -> よお, ろー -> ろお, をー -> をお
      
      んー -> んん
      

      以下は、 unify_kana_prolonged_sound_mark オプションの使用例です。

      table_create --name Animals --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Animals --name name --type ShortText
      column_create --table Animals --name sound --type ShortText
      load --table Animals
      [
      {"_key":"1","name":"羊", "sound":"メーメー"},
      ]
      
      table_create \
        --name idx_animals_sound \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_kana_prolonged_sound_mark", true)'
      column_create --table idx_animals_sound --name animals_sound --flags COLUMN_INDEX|WITH_POSITION --type Animals --source sound
      
      select --table Animals --query sound:@メエメエ
      # [
      #   [
      #     0,
      #     1677829950.652696,
      #     0.01971983909606934
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ],
      #         [
      #           "sound",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "羊",
      #         "メーメー"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_kana_hyphen

      このオプションを使うことで、ハイフンを以下のように正規化できます。

      ァ- -> ァア, ア- -> アア, ヵ- -> ヵア, カ- -> カア, ガ- -> ガア, サ- -> サア, ザ- -> ザア,
      タ- -> タア, ダ- -> ダア, ナ- -> ナア, ハ- -> ハア, バ- -> バア, パ- -> パア, マ- -> マア,
      ャ- -> ャア, ヤ- -> ヤア, ラ- -> ラア, ヮ- -> ヮア, ワ- -> ワア, ヷ- -> ヷア,
      
      ィ- -> ィイ, イ- -> イイ, キ- -> キイ, ギ- -> ギイ, シ- -> シイ, ジ- -> ジイ, チ- -> チイ,
      ヂ- -> ヂイ, ニ- -> ニイ, ヒ- -> ヒイ, ビ- -> ビイ, ピ- -> ピイ, ミ- -> ミイ, リ- -> リイ,
      ヰ- -> ヰイ, ヸ- -> ヸイ,
      
      ゥ- -> ゥウ, ウ- -> ウウ, ク- -> クウ, グ- -> グウ, ス- -> スウ, ズ- -> ズウ, ツ- -> ツウ,
      ヅ- -> ヅウ, ヌ- -> ヌウ, フ- -> フウ, ブ- -> ブウ, プ- -> プウ, ム- -> ムウ, ュ- -> ュウ,
      ユ- -> ユウ, ル- -> ルウ, ヱ- -> ヱウ, ヴ- -> ヴウ,
      
      ェ- -> ェエ, エ- -> エエ, ヶ- -> ヶエ, ケ- -> ケエ, ゲ- -> ゲエ, セ- -> セエ, ゼ- -> ゼエ,
      テ- -> テエ, デ- -> デエ, ネ- -> ネエ, ヘ- -> ヘエ, ベ- -> ベエ, ペ- -> ペエ, メ- -> メエ,
      レ- -> レエ, ヹ- -> ヹエ,
      
      ォ- -> ォオ, オ- -> オオ, コ- -> コオ, ゴ- -> ゴオ, ソ- -> ソオ, ゾ- -> ゾオ, ト- -> トオ,
      ド- -> ドオ, ノ- -> ノオ, ホ- -> ホオ, ボ- -> ボオ, ポ- -> ポオ, モ- -> モオ, ョ- -> ョオ,
      ヨ- -> ヨオ, ロ- -> ロオ, ヲ- -> ヲオ, ヺ- -> ヺオ,
      
      ン- -> ンン
      
      ぁ- -> ぁあ, あ- -> ああ, ゕ- -> ゕあ, か- -> かあ, が- -> があ, さ- -> さあ, ざ- -> ざあ,
      た- -> たあ, だ- -> だあ, な- -> なあ, は- -> はあ, ば- -> ばあ, ぱ- -> ぱあ, ま- -> まあ,
      ゃ- -> ゃあ, や- -> やあ, ら- -> らあ, ゎ- -> ゎあ, わ- -> わあ
      
      ぃ- -> ぃい, い- -> いい, き- -> きい, ぎ- -> ぎい, し- -> しい, じ- -> じい, ち- -> ちい,
      ぢ- -> ぢい, に- -> にい, ひ- -> ひい, び- -> びい, ぴ- -> ぴい, み- -> みい, り- -> りい,
      ゐ- -> ゐい
      
      ぅ- -> ぅう, う- -> うう, く- -> くう, ぐ- -> ぐう, す- -> すう, ず- -> ずう, つ- -> つう,
      づ- -> づう, ぬ- -> ぬう, ふ- -> ふう, ぶ- -> ぶう, ぷ- -> ぷう, む- -> むう, ゅ- -> ゅう,
      ゆ- -> ゆう, る- -> るう, ゑ- -> ゑう, ゔ- -> ゔう
      
      ぇ- -> ぇえ, え- -> ええ, ゖ- -> ゖえ, け- -> けえ, げ- -> げえ, せ- -> せえ, ぜ- -> ぜえ,
      て- -> てえ, で- -> でえ, ね- -> ねえ, へ- -> へえ, べ- -> べえ, ぺ- -> ぺえ, め- -> めえ,
      れ- -> れえ
      
      ぉ- -> ぉお, お- -> おお, こ- -> こお, ご- -> ごお, そ- -> そお, ぞ- -> ぞお, と- -> とお,
      ど- -> どお, の- -> のお, ほ- -> ほお, ぼ- -> ぼお, ぽ- -> ぽお, も- -> もお, ょ- -> ょお,
      よ- -> よお, ろ- -> ろお, を- -> をお
      
      ん- -> んん
      

      以下は、 unify_kana_hyphen オプションの使用例です。

      table_create --name Animals --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Animals --name name --type ShortText
      column_create --table Animals --name sound --type ShortText
      load --table Animals
      [
      {"_key":"1","name":"羊", "sound":"メ-メ-"},
      ]
      
      table_create \
        --name idx_animals_sound \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_kana_hyphen", true)'
      column_create --table idx_animals_sound --name animals_sound --flags COLUMN_INDEX|WITH_POSITION --type Animals --source sound
      
      select --table Animals --query sound:@メエメエ
      # [
      #   [
      #     0,1677829950.652696,
      #     0.01971983909606934
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ],
      #         [
      #           "sound",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "羊",
      #         "メ-メ-"
      #       ]
      #     ]
      #   ]
      # ]
      
  • [近傍検索条件][近傍検索演算子] 各近傍検索に ${MIN_INTERVAL} オプションを追加しました。

    ${MIN_INTERVAL} でフレーズ間(単語間)の最低距離を指定できるようになりました。フレーズ間(単語間)の距離は、最低でもこの値以上である必要があります。

    新しい構文は以下のとおりです。

    *N${MAX_INTERVAL},${MAX_TOKEN_INTERVAL_1}|${MAX_TOKEN_INTERVAL_2}|...,${MIN_INTERVAL} "word1 word2 ..."
    *NP${MAX_INTERVAL},${ADDITIONAL_LAST_INTERVAL},${MAX_PHRASE_INTERVAL_1}|${MAX_PHRASE_INTERVAL_2}|...,${MIN_INTERVAL} "phrase1 phrase2 ..."
    *NPP${MAX_INTERVAL},${ADDITIONAL_LAST_INTERVAL},${MAX_PHRASE_INTERVAL_1}|${MAX_PHRASE_INTERVAL_2}|...,${MIN_INTERVAL} "(phrase1-1 phrase1-2 ...) (phrase2-1 phrase2-2 ...) ..."
    *ONP${MAX_INTERVAL},${ADDITIONAL_LAST_INTERVAL},${MAX_PHRASE_INTERVAL_1}|${MAX_PHRASE_INTERVAL_2}|...,${MIN_INTERVAL} "phrase1 phrase2 ..."
    *ONPP${MAX_INTERVAL},${ADDITIONAL_LAST_INTERVAL},${MAX_PHRASE_INTERVAL_1}|${MAX_PHRASE_INTERVAL_2}|...,${MIN_INTERVAL} "(phrase1-1 phrase1-2 ...) (phrase2-1 phrase2-2 ...) ..."
    

    ${MIN_INTERVAL} のデフォルト値は INT32_MIN (-2147483648) です。${MIN_INTERVAL} を省略した場合デフォルト値が使用されます。

    このオプションは重複したフレーズを無視するのに便利です。

    *NP の距離は 各フレーズの先頭のトークンの距離 - 左のフレーズのトークン数 + 1 で計算されます。

    トークナイザーがバイグラムの場合を考えると、例えば、 東京東京 という一つのトークンを持ち、 京都京都 という一つのトークンを持ちます。

    *NP "東京 京都" の対象の値として 東京都 を考えてみます。

    • 各フレーズの先頭のトークンの距離: 1 (東京京都 の距離)

    • 左のフレーズのトークン数: 1 ( 東京 )

    東京都 に対して *NP で使われる距離は、 1 - 1 + 1 = 1 となります。

    結果として、 東京京都 が重複していないとき、 *NP で使われる距離は 1 より大きくなります。

    このオプションは重複したフレーズを無視するのに便利です。

    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 NormalizerNFKC150
    column_create Terms entries_content COLUMN_INDEX|WITH_POSITION Entries content
    
    load --table Entries
    [
    {"content": "東京都"},
    {"content": "東京京都"}
    ]
    
    select Entries \
      --match_columns content \
      --query '*NP-1,0,,2"東京 京都"' \
      --output_columns '_score, content'
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_score",
    #           "Int32"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ]
    #       ],
    #       [
    #         1,
    #         "東京京都"
    #       ]
    #     ]
    #   ]
    # ]
    

    上記の例では、 東京都 は距離が 1 なのでマッチしませんが、 東京京都 は距離が 2 なのでマッチします。

  • [ノーマライザー] unify_katakana_trailing_o オプションで新しい値をサポートしました。

    unify_katakana_trailing_o で以下の新しい値のノーマライズをサポートしました。これらの左側の文字の母音が なので、ノーマライズすべきなためです。

    • ォオ -> ォウ

    • ョオ -> ョウ

    • ヺオ -> ヺウ

  • MessagePack v6.0.0 をサポートしました。 [GitHub#1536][Reported by Carlo Cabrera]

    今まで、Groongaは configure または cmake 実行時にMessagePack v6.0.0以降のMessagePackを検出できませんでした。このリリースから、MessagePackがv6.0.0以降であっても検出できるようになります。

修正#

  • [ノーマライザー] NormalizerNFKCが不正な正規化をする問題を修正しました。

    この問題は、 unify_kana_caseunify_katakana_v_sounds を同時に使う場合に発生します。

    例えば、 unify_kana_caseunify_katakana_v_sounds を同時に使うとき、 ヴァバア にノーマライズされていました。しかし ヴァ と正規化されるべきです。

    これは、 unify_kana_caseヴァヴア と正規化され、その後、 unify_katakana_v_sounds によって ヴアバア と正規化されていたことが原因です。unify_katakana_v_soundsunify_kana_case より前に適用されるように修正しました。

    以下は以前のバージョンでの問題の発生例です。

    normalize \
      'NormalizerNFKC150("unify_katakana_v_sounds", true, \
                         "unify_kana_case", true)' \
      "ヴァーチャル"
    #[
    #  [
    #    0,
    #    1678097412.913053,
    #    0.00019073486328125
    #  ],
    #  {
    #    "normalized":"ブアーチヤル",
    #    "types":[],
    #    "checks":[]
    #  }
    #]
    

    このバージョンから、 ヴァーチャルバーチヤル にノーマライズされます。

  • [順序付き近傍フレーズ検索条件][順序付き近傍フレーズ検索演算子] ${MAX_PHRASE_INTERVALS} が正しく動かない問題を修正しました。

    この問題が発生したとき、距離は 0 とみなされます。したがって、この問題が発生した場合、余分にレコードがヒットすることがあります。

    この問題は以下の場合に発生します。

    1. *ONP${MAX_PHRASE_INTERVALS} を使用している

    2. マッチした左側のフレーズに含まれるトークンの数が、 ${MAX_PHRASE_INTERVALS} で指定した要素数より多い

    以下はこの問題の例です。

    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 NormalizerNFKC150
    column_create Terms entries_content COLUMN_INDEX|WITH_POSITION Entries content
    load --table Entries
    [
    {"content": "abcXYZdef"},
    {"content": "abcdef"},
    {"content": "abc123456789def"},
    {"content": "abc12345678def"},
    {"content": "abc1de2def"}
    ]
    select Entries --filter 'content *ONP-1,0,1 "abc def"' --output_columns '_score, content'
    #[
    #  [
    #    0,
    #    0.0,
    #    0.0
    #  ],
    #  [
    #    [
    #      [
    #        5
    #      ],
    #      [
    #        [
    #          "_score",
    #          "Int32"
    #        ],
    #        [
    #          "content",
    #          "Text"
    #        ]
    #      ],
    #      [
    #        1,
    #        "abcXYZdef"
    #      ],
    #      [
    #        1,
    #        "abcdef"
    #      ],
    #      [
    #        1,
    #        "abc123456789def"
    #      ],
    #      [
    #        1,
    #        "abc12345678def"
    #      ],
    #      [
    #        1,
    #        "abc1de2def"
    #      ]
    #    ]
    #  ]
    #]
    

    上記の例では、 *ONP-1,0,1 "abc def" で、最初の要素の距離に 1 を指定しています。しかし、距離が 1 より離れているものも含めた、すべての content がマッチしています。

    これは、この例がこの問題の発生条件を満たしていて、距離が 0 とみなされているためです。

    1. *ONP${MAX_PHRASE_INTERVALS} を使用している

      *ONP-1,0,1 "abc def"${MAX_PHRASE_INTERVALS} を使用している。

    2. マッチした左側のフレーズに含まれるトークンの数が、 ${MAX_PHRASE_INTERVALS} で指定した要素数より多い

      • マッチした左側のフレーズ: abc

        • 含まれるトークン: abbc

        • TokenNgram("unify_alphabet", false, "unify_digit", false) によるトークナイズ

      • 左側のフレーズに含まれるトークン数 (2) > max_element_intervals にに含まれる要素数 (1)

        • *ONP-1,0,1 "abc def"1

      • 左側のフレーズに含まれるトークン数 (2) > max_element_intervals にに含まれる要素数 (1)

  • [近傍フレーズ検索条件][近傍フレーズ検索演算子] 各近傍フレーズ検索で、最後として指定したフレーズが最後として使用されない問題を修正しました。

    この問題が発生すると ${ADDITIONAL_LAST_INTERVAL} は無視され、 ${MAX_INTERVAL} が使用されます。

    この問題は以下の場合に発生します。

    1. 最後として指定されたフレーズが複数のトークンを含む

    2. そのフレーズの最後のトークンのサイズが、他のトークンのサイズ以下である

      • トークンサイズとは、全レコード中に出現するそのトークンの数です。

    以下はこの問題の例です。

    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 NormalizerNFKC150
    column_create Terms entries_content COLUMN_INDEX|WITH_POSITION Entries content
    
    load --table Entries
    [
    {"content": "abc123456789defg"},
    {"content": "dededede"}
    ]
    
    select Entries \
      --filter 'content *NP10,1"abc defg$"' \
      --output_columns '_score, content'
    #[
    #  [
    #    0,
    #    0.0,
    #    0.0
    #  ],
    #  [
    #    [
    #      [
    #        0
    #      ],
    #      [
    #        [
    #          "_score",
    #          "Int32"
    #        ],
    #        [
    #          "content",
    #          "Text"
    #        ]
    #      ]
    #    ]
    #  ]
    #]
    

    上記の例の abc123456789defg について考えると、 abc から defg までの距離は 11 です。 ${MAX_INTERVAL}10${ADDITIONAL_LAST_INTERVAL}1 が指定されています。したがって、最後のフレーズがマッチするしきい値は11になります。以上から、 abc123456789defg はマッチするはずですが、していません。

    これは、この例が、以下のようにこの問題の発生条件を満たしていて、${MAX_INTERVAL} のみが使われているためです。

    1. 最後として指定されたフレーズが複数のトークンを含む

      最後に $ がついているので、 defg$ は最後と指定されています。

      defg$TokenNgram("unify_alphabet", false, "unify_digit", false) によって de, ef, fg にトークナイズされます。

    2. そのフレーズの最後のトークンのサイズが、他のトークンのサイズ以下である

      fgdefg$ の最後のトークンです。 abc123456789defg は1つの fgde を含みます。そして、 dededede は4つの de を含みます。

      したがって、 fg のサイズは 1 で、 de のサイズは 5 です。

  • [近傍フレーズ検索条件] 距離の計算方法を修正しました。

    この問題によって、近傍フレーズ検索を使った場合に、ヒットしないはずのレコードがヒットすることがあります。

  • [highlight_html] loose_symbol=true の時にハイライト位置がずれることがある問題を修正しました。

感謝#

  • Carlo Cabreraさん

13.0.0リリース - 2023-02-09#

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく13.0.0へアップグレードできます。

まずはじめに 13.0.0の主な変更点を紹介します。次に、Groonga 12.0.0 から 12.1.2 までの変更点を紹介します。

改良#

  • [ノーマライザー] Unicode 15.0 の NFKC(Normalization Form Compatibility Composition)をベースにしたノーマライザー NormalizerNFKC150 を新しく追加しました。

  • [トークンフィルター] Unicode 15.0 の NFKC(Normalization Form Compatibility Composition)をベースにしたトークンフィルター TokenFilterNFKC150 を新しく追加しました。

  • [NormalizerNFKC150] NormalizerNFKC に以下の新しいオプションを追加しました。

    • unify_katakana_gu_small_sounds

      このオプションを使うことで、"グァ -> ガ", "グィ -> ギ", "グェ -> ゲ", "グォ -> ゴ"と正規化できます。

      以下は unify_katakana_gu_small_sounds オプションの使用例です。

      table_create --name Countries --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Countries --name name --type ShortText
      load --table Countries
      [
      {"_key":"JP","name":"日本"},
      {"_key":"GT","name":"グァテマラ共和国"},
      ]
      
      table_create \
        --name idx_contry_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_gu_small_sounds", true)'
      column_create --table idx_contry_name --name contry_name --flags COLUMN_INDEX|WITH_POSITION --type Countries --source name
      
      select --table Countries --query name:@ガテマラ共和国
      # [
      #   [0,
      #    0,
      #    0
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         2,
      #         "GT",
      #         "グァテマラ共和国"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_di_sound

      このオプションを使うことで、"ヂ -> ジ"と正規化できます。

      以下は、 unify_katakana_di_sound オプションの使用例です。

      table_create --name Foods --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Foods --name name --type ShortText
      load --table Foods
      [
      {"_key":"1","name":"チジミ"},
      {"_key":"2","name":"パジョン"},
      ]
      
      table_create \
        --name idx_food_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_di_sound", true)'
      column_create --table idx_food_name --name food_name --flags COLUMN_INDEX|WITH_POSITION --type Foods --source name
      
      select --table Foods --query name:@チヂミ
      # [
      #   [
      #     0,
      #     0,
      #     0
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "チジミ"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_wo_sound

      このオプションを使うことで、"ヲ -> オ"と正規化できます。

      以下は、 unify_katakana_wo_sound オプションの使用例です。

      table_create --name Foods --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Foods --name name --type ShortText
      load --table Foods
      [
      {"_key":"1","name":"アヲハタ"},
      {"_key":"2","name":"ヴェルデ"},
      {"_key":"3","name":"ランプ"},
      ]
      
      table_create \
        --name idx_food_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_wo_sound", true)'
      column_create --table idx_food_name --name food_name --flags COLUMN_INDEX|WITH_POSITION --type Foods --source name
      
      select --table Foods --query name:@アオハタ
      # [
      #   [
      #     0,
      #     0,
      #     0
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "アヲハタ"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_zu_small_sounds

      このオプションを使うことで、"ズァ -> ザ", "ズィ -> ジ", "ズェ -> ゼ", "ズォ -> ゾ"と正規化できます。

      以下は、 unify_katakana_zu_small_sounds オプションの使用例です。

      table_create --name Cities --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Cities --name name --type ShortText
      load --table Cities
      [
      {"_key":"1","name":"ガージヤーバード"},
      {"_key":"2","name":"デリー"},
      ]
      
      table_create \
        --name idx_city_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_zu_small_sounds", true)'
      column_create --table idx_city_name --name city_name --flags COLUMN_INDEX|WITH_POSITION --type Cities --source name
      
      select --table Cities --query name:@ガーズィヤーバード
      # [
      #   [
      #     0,
      #     0,
      #     0
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "ガージヤーバード"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_du_sound

      このオプションを使うことで、"ヅ -> ズ"と正規化できます。

      以下は、 unify_katakana_du_sound オプションの使用例です。

      table_create --name Plants --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Plants --name name --type ShortText
      load --table Plants
      [
      {"_key":"1","name":"ハスノカヅラ"},
      {"_key":"2","name":"オオツヅラフジ"},
      {"_key":"3","name":"アオツヅラフジ"},
      ]
      
      table_create \
        --name idx_plant_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_du_sound", true)'
      column_create --table idx_plant_name --name plant_name --flags COLUMN_INDEX|WITH_POSITION --type Plants --source name
      
      select --table Plants --query name:@ツズラ
      # [
      #   [
      #     0,
      #     0,
      #     0
      #   ],
      #   [
      #     [
      #       [
      #         2
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         2,
      #         "2",
      #         "オオツヅラフジ"
      #       ],
      #       [
      #         3,
      #         "3",
      #         "アオツヅラフジ"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_trailing_o

      このオプションによって、以下の文字を正規化できます。

      • "オオ -> オウ"

      • "コオ -> コウ"

      • "ソオ -> ソウ"

      • "トオ -> トウ"

      • "ノオ -> ノウ"

      • "ホオ -> ホウ"

      • "モオ -> モウ"

      • "ヨオ -> ヨウ"

      • "ロオ -> ロウ"

      • "ゴオ -> ゴウ"

      • "ゾオ -> ゾウ"

      • "ドオ -> ドウ"

      • "ボオ -> ボウ"

      • "ポオ -> ポウ"

      以下は、 unify_katakana_trailing_o オプションの使用例です。

      table_create --name Sharks --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Sharks --name name --type ShortText
      load --table Sharks
      [
      {"_key":"1","name":"ホオジロザメ"},
      {"_key":"2","name":"ジンベイザメ"},
      ]
      
      table_create \
        --name idx_shark_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_trailing_o", true)'
      column_create --table idx_shark_name --name shark_name --flags COLUMN_INDEX|WITH_POSITION --type Sharks --source name
      
      select --table Sharks --query name:@ホウジロザメ
      # [
      #   [
      #     0,
      #     0,
      #     0
      #   ],
      #   [
      #     [
      #       [
      #         1
      #       ],
      #       [
      #         [
      #           "_id",
      #           "UInt32"
      #         ],
      #         [
      #           "_key",
      #           "ShortText"
      #         ],
      #         [
      #           "name",
      #           "ShortText"
      #         ]
      #       ],
      #       [
      #         1,
      #         "1",
      #         "ホオジロザメ"
      #       ]
      #     ]
      #   ]
      # ]
      
    • unify_katakana_du_small_sounds

      このオプションを使うことで、 "ヅァ -> ザ", "ヅィ -> ジ", "ヅェ -> ゼ", "ヅォ -> ゾ"と正規化できます。

      以下は、 unify_katakana_du_small_sounds オプションの使用例です。

      table_create --name Airports --flags TABLE_HASH_KEY --key_type ShortText
      column_create --table Airports --name name --type ShortText
      load --table Airports
      [
      {"_key":"HER","name":"イラクリオ・ニコスカザンヅァキス国際空港"},
      {"_key":"ATH","name":"アテネ国際空港"},
      ]
      
      table_create \
        --name idx_airport_name \
        --flags TABLE_PAT_KEY \
        --key_type ShortText \
        --default_tokenizer TokenBigram \
        --normalizer 'NormalizerNFKC150("unify_katakana_du_small_sounds", true)'
      column_create --table idx_airport_name --name airport_name --flags COLUMN_INDEX|WITH_POSITION --type Airports --source name
      
      select --table Airports --query name:@ニコスカザンザキス
      # [
      #   [
      #     [
      #       1
      #     ],
      #     [
      #       [
      #         "_id",
      #         "UInt32"
      #       ],
      #       [
      #         "_key",
      #         "ShortText"
      #       ],
      #       [
      #         "name",
      #         "ShortText"
      #       ]
      #     ],
      #     [
      #       1,
      #       "HER",
      #       "イラクリオ・ニコスカザンヅァキス国際空港"
      #     ]
      #   ]
      # ]
      
  • [Oracle Linux] Oracle Linux 8と9 向けのパッケージを新しくサポートしました。

感謝#

  • 篠田さん

  • i10aさん

  • naoaさん

  • shinononさん

  • Zhanzhao (Deo) Liangさん

  • David CARLIERさん

Groonga 12.0.0 から 12.1.2 までの主な変更点#

ハイライト#

[12.0.9リリース - 2022-10-28]

  • [ノーマライザー] NormalizerHTML を追加しました。(実験的)

    NormalizerHTML はHTML用のノーマライザーです。

    現在 NormalizerHTML<span></span> といったタグの削除と、&amp;&#38; といった文字参照の展開を行います。

    以下は NormalizerHTML の例です。

    normalize NormalizerHTML "<span> Groonga &amp; Mroonga &#38; Rroonga </span>"
    # [[0,1666923364.883798,0.0005481243133544922],{"normalized":" Groonga & Mroonga & Rroonga ","types":[],"checks":[]}]
    

    この例では、 <span></span> は削除され、 &amp;&#38;& に展開されています。

    タグを削除するかどうかは remove_tag オプションで指定できます。(remove_tag オプションのデフォルト値は true です。)

    normalize 'NormalizerHTML("remove_tag", false)' "<span> Groonga &amp; Mroonga &#38; Rroonga </span>"
    # [[0,1666924069.278549,0.0001978874206542969],{"normalized":"<span> Groonga & Mroonga & Rroonga </span>","types":[],"checks":[]}]
    

    この例では、 <span></span> は削除されていません。

    文字参照を展開するかどうかは expand_character_reference オプションで指定できます。(expand_character_reference オプションのデフォルト値は true です。)

    normalize 'NormalizerHTML("expand_character_reference", false)' "<span> Groonga &amp; Mroonga &#38; Rroonga </span>"
    # [[0,1666924357.099782,0.0002346038818359375],{"normalized":" Groonga &amp; Mroonga &#38; Rroonga ","types":[],"checks":[]}]
    

    この例では、 &amp;&#38; は展開されていません。

[12.0.3リリース - 2022-04-29]

  • [snippet],[snippet_html] 入力としてベクターをサポートしました。[groonga-dev,04956][Reported by shinonon]

    例えば、以下のようにJSONデータ内のベクターに対して検索キーワードの周辺テキストを抽出できます。

    table_create Entries TABLE_NO_KEY
    column_create Entries title COLUMN_SCALAR ShortText
    column_create Entries contents COLUMN_VECTOR ShortText
    
    table_create Tokens TABLE_PAT_KEY ShortText   --default_tokenizer TokenNgram   --normalizer NormalizerNFKC130
    column_create Tokens entries_title COLUMN_INDEX|WITH_POSITION Entries title
    column_create Tokens entries_contents COLUMN_INDEX|WITH_SECTION|WITH_POSITION   Entries contents
    
    load --table Entries
    [
    {
      "title": "Groonga and MySQL",
      "contents": [
        "Groonga is a full text search engine",
        "MySQL is a RDBMS",
        "Mroonga is a MySQL storage engine based on Groonga"
      ]
    }
    ]
    
    select Entries\
      --output_columns 'snippet_html(contents), contents'\
      --match_columns 'title'\
      --query Groonga
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "snippet_html",
    #           null
    #         ],
    #         [
    #           "contents",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         [
    #           "<span class=\"keyword\">Groonga</span> is a full text search engine",
    #           "Mroonga is a MySQL storage engine based on <span class=\"keyword\">Groonga</span>"
    #         ],
    #         [
    #           "Groonga is a full text search engine",
    #           "MySQL is a RDBMS",
    #           "Mroonga is a MySQL storage engine based on Groonga"
    #         ]
    #       ]
    #     ]
    #   ]
    # ]
    

    今までも、 --output_columns 'snippet_html(contents[1])' のように snippet* を指定することで以下のようにベクターに対して検索キーワードの周辺テキストを抽出できますが、この方法ではどの要素を出力すればよいかわかりません。どの要素が検索にヒットしたかわからないためです。

    select Entries\
      --output_columns 'snippet_html(contents[0]), contents'\
      --match_columns 'title'\
      --query Groonga
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "snippet_html",
    #           null
    #         ],
    #         [
    #           "contents",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         [
    #           "<span class=\"keyword\">Groonga</span> is a full text search engine"
    #         ],
    #         [
    #           "Groonga is a full text search engine",
    #           "MySQL is a RDBMS",
    #           "Mroonga is a MySQL storage engine based on Groonga"
    #         ]
    #       ]
    #     ]
    #   ]
    # ]
    

[12.0.1リリース - 2022-02-28]

  • [query_expand] 同義語グループをサポートしました。

    同義語検索をする場合、今までは、以下のようにキーワードとその同義語をそれぞれ定義していました。

    table_create Thesaurus TABLE_PAT_KEY ShortText --normalizer NormalizerAuto
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Thesaurus synonym COLUMN_VECTOR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    load --table Thesaurus
    [
    {"_key": "mroonga", "synonym": ["mroonga", "tritonn", "groonga mysql"]},
    {"_key": "groonga", "synonym": ["groonga", "senna"]}
    ]
    

    上記のケースでは、mroonga を検索した場合、 Groongaは、意図通り、 mroonga OR tritonn OR "groonga mysql" を検索しますが、tritonnを検索した場合は、 Groongaは、tritonn のみを検索します。tritonn を検索した場合でも、tritonn OR mroonga OR "groonga mysql"` と検索した場合、以下のように定義を追加する必要がありました。

    load --table Thesaurus
    [
    {"_key": "tritonn", "synonym": ["tritonn", "mroonga", "groonga mysql"]},
    ]
    

    多くのケースでは、 mroongamroonga OR tritonn OR "groonga mysql" と展開した場合、 tritonn"groonga mysql"mroonga OR tritonn OR "groonga mysql" と展開して欲しくなりますが、今までは、そのようなケースでは定義を追加する必要がありました。したがって、対象のキーワードに同義語がたくさんあると、同じような定義をたくさん定義する必要があるため、同義語の定義が煩雑でした。

    加えて、同義語を削除する際も、多くのレコードを削除する必要があるので面倒でした。

    今回のリリースから同義語の代表値を決めることで一つのグループを作れるようになりました。例えば、以下のすべてのキーワードは、 "mroonga" グループです。

    load --table Synonyms
    [
      {"_key": "mroonga": "representative": "mroonga"}
    ]
    
    load --table Synonyms
    [
      {"_key": "tritonn": "representative": "mroonga"},
      {"_key": "groonga mysql": "representative": "mroonga"}
    ]
    

    このケースでは、 mroongamroonga OR tritonn OR "groonga mysql" と展開されます。また、 tritonn"groonga mysql"mroonga OR tritonn OR "groonga mysql" と展開されます。

    同義語を削除する際も、対象のレコードを削除するだけです。例えば、同義語から "groonga mysql" を削除する場合は、 {"_key": "groonga mysql": "representative": "mroonga"} を削除するだけです。

[12.0.0リリース - 2022-02-09]

  • [index_column_have_source_record] 新しい関数 index_column_have_source_record() を追加しました。

    インデックスに存在するトークンがGroongaに登録されているいずれかのレコードに含まれているかどうかを確認できます。

    Groongaは、レコードの更新によってどのレコードからも使われていないトークンがあっても、それを削除しません。したがって、例えば、オートコンプリート機能を使っていると、検索候補としてどのレコードにも含まれていないトークンを返す可能性がありますが、この関数をつかうことで、不要なトークンを返さないようにできます。

    この関数は、トークンがどのレコードにも含まれていないことを検出できるからです。

  • [select] 新しい引数 drilldown_max_n_target_recordsdrilldown[${LABEL}].max_n_target_records を追加しました。

    ドリルダウン対象のテーブル(フィルター結果)の中のうち最大で何レコードをドリルダウンに使うかを指定します。もし、フィルター結果のレコード数が指定した値より大きかったらフィルターした結果内のいくつかのレコードはドリルダウンには使われません。これらの引数のデフォルト値は、 -1 です。これらの引数に -1 がセットされた場合、Groongaは全てのレコードをドリルダウンに使います。

    この機能はフィルター結果が非常に大きくなるかもしれない場合に有用です。大きなフィルター結果に対するドリルダウンは遅くなることがあるためです。この機能を使うことでドリルダウンに使うレコード数を制限できます。

    以下はドリルダウンに使う最大レコード数を制限する例です。最後の2レコード( {"_id": 4, "tag": "Senna"}{"_id": 5, "tag": "Senna"} )は使われていません。

     table_create Entries TABLE_HASH_KEY ShortText
     column_create Entries content COLUMN_SCALAR Text
     column_create Entries n_likes COLUMN_SCALAR UInt32
     column_create Entries tag COLUMN_SCALAR ShortText
    
     table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
     column_create Terms entries_key_index COLUMN_INDEX|WITH_POSITION Entries _key
     column_create Terms entries_content_index COLUMN_INDEX|WITH_POSITION Entries content
     load --table Entries
     [
     {"_key":    "The first post!",
      "content": "Welcome! This is my first post!",
      "n_likes": 5,
      "tag": "Hello"},
     {"_key":    "Groonga",
      "content": "I started to use Groonga. It's very fast!",
      "n_likes": 10,
      "tag": "Groonga"},
     {"_key":    "Mroonga",
      "content": "I also started to use Mroonga. It's also very fast! Really fast!",
      "n_likes": 15,
      "tag": "Groonga"},
     {"_key":    "Good-bye Senna",
      "content": "I migrated all Senna system!",
      "n_likes": 3,
      "tag": "Senna"},
     {"_key":    "Good-bye Tritonn",
      "content": "I also migrated all Tritonn system!",
      "n_likes": 3,
      "tag": "Senna"}
     ]
    
     select Entries \
       --limit -1 \
       --output_columns _id,tag \
       --drilldown tag \
       --drilldown_max_n_target_records 3
     # [
     #   [
     #     0,
     #     1337566253.89858,
     #     0.000355720520019531
     #   ],
     #   [
     #     [
     #       [
     #         5
     #       ],
     #       [
     #         [
     #           "_id",
     #           "UInt32"
     #         ],
     #         [
     #           "tag",
     #           "ShortText"
     #         ]
     #       ],
     #       [
     #         1,
     #         "Hello"
     #       ],
     #       [
     #         2,
     #         "Groonga"
     #       ],
     #       [
     #         3,
     #         "Groonga"
     #       ],
     #       [
     #         4,
     #         "Senna"
     #       ],
     #       [
     #         5,
     #         "Senna"
     #       ]
     #     ],
     #     [
     #       [
     #         2
     #       ],
     #       [
     #         [
     #           "_key",
     #           "ShortText"
     #         ],
     #         [
     #           "_nsubrecs",
     #           "Int32"
     #         ]
     #       ],
     #       [
     #         "Hello",
     #         1
     #       ],
     #       [
     #         "Groonga",
     #         2
     #       ]
     #     ]
     #   ]
     # ]
    

概要#

改良#

[12.1.2リリース - 2023-01-29]

  • [httpd] バンドルしているnginxのバージョンを1.23.3に更新しました。

[12.1.1リリース - 2023-01-06]

  • [select][POWER_SET] ドリルダウンでベクターのべき集合を集計できるようになりました。

  • [select] ベクターカラムの特定の要素のみを対象に検索できるようになりました。

  • [load] YYYY-MM-DD 形式をサポートしました。

[12.1.0リリース - 2022-11-29]

  • [load] load のスローログの出力に対応しました。

  • [API] 新しいAPI grn_is_reference_count_enable() を追加しました。

  • [status] 新しい項目 back_tracereference_count を追加しました。

[12.0.9リリース - 2022-10-28]

  • [AlmaLinux] AlmaLinux 9 向けのパッケージをサポートしました。

  • [escalate] escalate() 関数のドキュメントを追加しました。

  • [ノーマライザー] NormalizerHTML を追加しました。(実験的)

  • [httpd] バンドルしているnginxのバージョンを1.23.2に更新しました。

  • メモリーが不足した際に、同じログが大量に出力されないように変更しました。

[12.0.8リリース - 2022-10-03]

[12.0.7リリース - 2022-08-29]

  • 新しい関数 escalate() を追加しました。(実験的)

  • [httpd] バンドルしているnginxのバージョンを1.23.1に更新しました。

  • [select] --n_workers オプションのドキュメントを追加しました。

[12.0.6リリース - 2022-08-04]

  • groonga-delta用の新しいMuninプラグインを追加しました。

  • [column_copy] 重み付きベクターをサポートしました。

  • [Ubuntu] Ubuntu 21.10 (Impish Indri) のサポートをやめました。

  • [Debian GNU/Linux] Debian 10 (buster) のサポートをやめました。

[12.0.5リリース - 2022-06-29]

  • [select] 検索エスカレーションによる前方一致検索のパフォーマンスを少し改善しました。

  • [select] drilldowns[LABEL]._key に重み付き参照ベクターカラムを指定できるようになりました。

  • [select] queryfilterpost_filter を使っていても、ドリルダウンのキーに重み付き参照ベクターカラムを指定できるようになりました。

[12.0.4リリース - 2022-06-06]

  • [Ubuntu] Ubuntu 22.04 (Jammy Jellyfish)をサポートしました。

  • groonga-benchmark の提供をやめました。

  • [status] 新しい項目 memory_map_size を追加しました。

[12.0.3リリース - 2022-04-29]

  • [logical_count] logical_count 実行中のメモリー使用量を改善しました。

  • [dump] MISSING_IGNORE/MISSING_NIL をサポートしました。

  • [snippet],[snippet_html] 入力としてベクターをサポートしました。

  • [vector_join] 新しい関数 vector_join() を追加しました。

  • [インデックス構築] 動的インデックス構築のようにとても大きなトークンを無視するようにしました。

[12.0.2リリース - 2022-03-29]

  • [logical_range_filter] シャードを処理した直後に参照を減らすようにしました。

  • クラッシュリカバリー機能の安定性が向上しました。

  • 無名マッピングが利用可能な時のmmapのパフォーマンスを向上しました。

  • [インデックス構築] 以下のタイプのカラムで静的インデックス構築をサポートしました。

  • [column_create] 新しいフラグ MISSING_*INVALID_* を追加しました。

  • [dump][column_list] MISSING_*INVALID_* フラグをサポートしました。

  • [schema] MISSING_*INVALID_* フラグをサポートしました。

  • Amazon Linux 2向けのパッケージを提供するようにしました。

  • [Windows] Visual Studio 2017 でのビルドをやめました。

[12.0.1リリース - 2022-02-28]

  • [query_expand] 同義語グループをサポートしました。

  • [query_expand] 同義語グループにベクターを使えるようにしました。

  • 環境変数によって、バックトレースを無効にできるようにしました。

  • [select] --slices のパフォーマンスを改善しました。

  • [Windows] VisualStudio 2022 をサポートしました。

  • [select] 近傍検索でそれぞれの要素ごとの距離を指定できるようになりました。

  • [Groonga HTTPサーバー] RPMパッケージのGroongaであっても、 groonga-server-http を使えるようにしました。

[12.0.0リリース - 2022-02-09]

  • [sub_filter] 新しいオプション pre_filter_threshold を追加しました。

  • [index_column_have_source_record] 新しい関数 index_column_have_source_record() を追加しました。

  • [NormalizerNFKC130] 新しいオプション strip を追加しました。

  • [select] 新しい引数 drilldown_max_n_target_recordsdrilldown[${LABEL}].max_n_target_records を追加しました。

  • [httpd] バンドルしているnginxのバージョンを1.21.6に更新しました。

修正#

[12.1.1リリース - 2023-01-06]

  • [select] command_version3 のとき、 drilldown の結果のラベルが不正になる問題を修正しました。

  • [NormalizerTable] 特定の定義が NormalizerTable に存在する場合、Groongaがクラッシュすることがある問題を修正しました。

[12.1.0リリース - 2022-11-29]

  • [select][ベクターカラム] 重み付きベクターカラムで WEIGHT_FLOAT32 を指定したとき、結果が整数で表示されていた問題を修正しました。

[12.0.9リリース - 2022-10-28]

  • [select] n_workers を指定したとき、Groongaがクラッシュしたり、誤った結果を返すことがある問題を修正しました。

[12.0.8リリース - 2022-10-03]

  • NormalizerTable で冪等でない(繰り返し実行すると結果が変わることがある)定義をした時に、Groongaが誤った結果を返すことがある問題を修正しました。

[12.0.7リリース - 2022-08-29]

  • OR検索実行中に request_cancel を実行した場合、Groongaの応答が遅くなることがある問題を修正しました。

[12.0.6リリース - 2022-08-04]

  • n_workers オプションを使ってドリルダウンを並行して実行したときにGroongaがクラッシュすることがある問題を修正しました。

  • [select] --filter に非常に長い式を指定するとシンタックスエラーになる問題を修正しました。

[12.0.4リリース - 2022-06-06]

  • 検索実行中に request_cancel を実行した時Groongaの応答が遅くなることがある問題を修正しました。

  • 文字列リストをint32のベクターにキャストできない問題を修正しました。

  • GroongaのMuninプラグインがAlmaLinux 8 とCentOS 7上で動作しない問題を修正しました。

[12.0.3リリース - 2022-04-29]

  • パトリシアトライのテーブルにキーを追加できなくなることがある問題を修正しました。