BloGroonga

2023-08-31

Groonga 13.0.6リリース

Groonga 13.0.6をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

改良

  • 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, …)

    aggregator_* は集計関数で、下記の種類があります。

    • aggregator_sum()

      指定したカラムの値の合計値を返します。

    • aggregator_mean()

      指定したカラムの値の算術平均を返します。

    • aggregator_sd()

      指定したカラムの値の標準偏差を返します。不偏標準偏差を返すこともできます。

    drilldown と合わせて使うことを想定しています。 例えば、drilldownで商品種別毎の売上の平均を取りたい場合は以下のようにします。

    table_create Items TABLE_HASH_KEY ShortText
    column_create Items price COLUMN_SCALAR UInt32
    column_create Items tag COLUMN_SCALAR ShortText
    
    load --table Items
    [
    {"_key": "Book",  "price": 1000, "tag": "A"},
    {"_key": "Note",  "price": 1000, "tag": "B"},
    {"_key": "Box",   "price": 500,  "tag": "B"},
    {"_key": "Pen",   "price": 500,  "tag": "A"},
    {"_key": "Food",  "price": 500,  "tag": "C"},
    {"_key": "Drink", "price": 300,  "tag": "B"}
    ]
    
    select Items \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].output_columns _key,_nsubrecs,price_mean \
      --drilldowns[tag].columns[price_mean].stage group \
      --drilldowns[tag].columns[price_mean].type Float \
      --drilldowns[tag].columns[price_mean].flags COLUMN_SCALAR \
      --drilldowns[tag].columns[price_mean].value 'aggregator_mean(price)'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            6
          ],
          [
            [
              "_id",
              "UInt32"
            ],
            [
              "_key",
              "ShortText"
            ],
            [
              "price",
              "UInt32"
            ],
            [
              "tag",
              "ShortText"
            ]
          ],
          [
            1,
            "Book",
            1000,
            "A"
          ],
          [
            2,
            "Note",
            1000,
            "B"
          ],
          [
            3,
            "Box",
            500,
            "B"
          ],
          [
            4,
            "Pen",
            500,
            "A"
          ],
          [
            5,
            "Food",
            500,
            "C"
          ],
          [
            6,
            "Drink",
            300,
            "B"
          ]
        ],
        {
          "tag":
          [
            [
              3
            ],
            [
              [
                "_key",
                "ShortText"
              ],
              [
                "_nsubrecs",
                "Int32"
              ],
              [
                "price_mean",
                "Float"
              ]
            ],
            [
              "A",
              2,
              750.0
            ],
            [
              "B",
              3,
              600.0
            ],
            [
              "C",
              1,
              500.0
            ]
          ]
        }
      ]
    ]
    

修正

  • highlight_html ハイライト位置が正しくないことがある問題を修正しました。

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

    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": "斉藤の一人"}
    ]
    
    select Entries \
      --match_columns body \
      --query '斉藤 一' \
      --output_columns 'highlight_html(body, Terms)'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            1
          ],
          [
            [
              "highlight_html",
              null
            ]
          ],
          [
            "<span class=\"keyword\">斉藤</span>の<span class=\"keyword\">一</span>人"
          ]
        ]
      ]
    ]