BloGroonga

2023-09-12

Groonga 13.0.7リリース

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

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

変更内容

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

修正

  • 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
        ]
      }
    ]
    
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>人"
          ]
        ]
      ]
    ]
    
2023-08-02

Groonga 13.0.5リリース

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

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

変更内容

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

修正

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

    この問題は、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'
    
2023-05-18

PostgreSQL用高速日本語全文検索モジュールPGroonga(ぴーじーるんが) 3.0.3リリース

PostgreSQLで高速日本語全文検索をできるようにするPGroongaの3.0.3をリリースしました!

ハイライト

今回のリリースの主な変更点は下記の通りです。

修正

  • PGroongaのWALを書き込む際に、PGroongaがクラッシュすることがある問題を修正しました。

  • GH-336: PostgreSQLの設定ファイルに shared_preload_libraries = 'pgroonga' を指定している際に、PGroongaがクラッシュする問題を修正しました。

    この修正により、shared_preload_libraries = 'pgroonga' を指定していてもPGroongaはクラッシュしませんが、PGroongaはうまく動作しません。

    例えば、 CREATE INDEX USING pgroonga は失敗します。

    ただ、今ままでも shared_preload_libraries = 'pgroonga' を指定していた場合、GroongaのDBを初期化するタイミングが無いので、PGroongaは正しく動作していないと思います。

    したがって、PostgreSQLの設定ファイルに shared_preload_libraries = 'pgroonga' を指定しないようにしてください。

アップグレード方法

2.0.0以降を使っている場合はアップグレードの「互換性がある場合」用の手順でアップグレードしてください。

1.Y.Zを使っている場合はアップグレードの「非互換の場合」用の手順でアップグレードしてください。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PostgreSQLで高速に日本語全文検索をしたいという方はPGroongaを使ってガンガン検索してください!

2023-05-11

PostgreSQL用高速日本語全文検索モジュールPGroonga(ぴーじーるんが) 3.0.2リリース

PostgreSQLで高速日本語全文検索をできるようにするPGroongaの3.0.2をリリースしました!

ハイライト

今回のリリースの主な変更点は下記の通りです。

修正

  • pgroonga_query_expand() を使った時にPGroongaがクラッシュすることがある問題を修正しました。

    ただし、おそらく、この問題はめったに発生しません。

  • INSERT を実行中にPostgreSQLがクラッシュした後に、PGroongaのインデックスを使った SELECT が失敗することがある問題を修正しました。

    ただし、こちらの問題もおそらくめったに発生しません。

  • HAVE_MSGPACK が定義されていない時に src/pgrn-wal.c で多くのコンパイルエラーが発生する問題を修正しました。

    この問題は、ソースからPGroongaをビルドするときにのみ発生します。

アップグレード方法

2.0.0以降を使っている場合はアップグレードの「互換性がある場合」用の手順でアップグレードしてください。

1.Y.Zを使っている場合はアップグレードの「非互換の場合」用の手順でアップグレードしてください。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PostgreSQLで高速に日本語全文検索をしたいという方はPGroongaを使ってガンガン検索してください!