BloGroonga

2020-12-29

Groonga 10.1.0リリース

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

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

変更内容

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

  • highlight_html 全角スペースをハイライト対処から除外しました。

  • status 新しい項目 features を追加しました。

  • status 新しい項目 apache_arrow を追加しました。

  • ウインドウ関数 対象のテーブルがシャードをまたいでいる場合でも、全てのテーブルを一度に処理するようにしました。(実験的)

  • 参照カラムに対する検索でシーケンシャルサーチをサポートしました。

  • [tokenizers] TokenDocumentVectorTFIDFTokenDocumentVectorBM25 でトークンカラムをサポートしました。

  • 以下のケースのパフォーマンスを改善しました。

    • (column @ "value") && (column @ "value")
  • Ubuntu Ubuntu 20.10 (Groovy Gorilla)をサポートしました。

  • Debian stretchのサポートをやめました。

  • CentOS CentOS 6のサポートをやめました。

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

  • 複数のドリルダウンのキーと複数のアクセサーを使用した時にGroongaがクラッシュする問題を修正しました。

  • 同じフレーズが複数回出現すると、近傍フレーズ検索がマッチしない問題を修正しました。

さいごに

詳細については、以下のお知らせも参照してください。

お知らせ 10.1.0リリース

それでは、Groongaでガンガン検索してください!

2020-12-01

Groonga 10.0.9リリース

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

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

変更内容

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

  • select limit-1 を指定した時のパフォーマンスを改善しました。

  • reference_acquire 新しいオプション --auto_release_count を追加しました。

  • Groongaが空の vectoruvector を評価した時の動作を変更しました。

    • このリリースから、空の vectoruvector はcommand version 3では、 false と評価されます。
  • ノーマライザー Unicode 13.0 の NFKC(Normalization Form Compatibility Composition)をベースにしたノーマライザー NormalizerNFKC130 を追加しました。

  • トークンフィルター Unicode 13.0 の NFKC(Normalization Form Compatibility Composition)をベースにしたトークンフィルター NormalizerNFKC130 を追加しました。

  • select "_score = column - X" のパフォーマンスを改善しました。

  • reference_acquire --recursive dependent オプションを指定した時に必要のないインデックスカラムへの参照を取得しないように改善しました。

  • select 順序限定の近傍フレーズ検索をサポートしました。

    • 今までの近傍フレーズ検索は、指定したフレーズ間の距離が近いレコードのみを探していました。
    • この機能は、以下の条件を満たすレコードを探します。

      • 指定したフレーズ間の距離が近い場合。
      • 指定したフレーズが指定した順序で並んでいる場合。
  • Groonga HTTPサーバー Groonga HTTP server が全てのワーカースレッドの完全な終了を待たずに終了していた問題を修正しました。

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

さいごに

詳細については、以下のお知らせも参照してください。

お知らせ 10.0.9リリース

それでは、Groongaでガンガン検索してください!

2020-11-10

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

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

新規ユーザーの方は、PGroonga 2.0.2のリリースアナウンスのPGroongaについても参照してください。

ハイライト

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

  • PostgreSQL 13 向けのパッケージを提供しました。

    • 前のバージョンから、すでにPostgreSQL 13 をサポートしていましたが、PostgreSQL 13 向けのパッケージは提供していませんでした。
    • 今回のリリースから、PostgreSQL 13 向けのパッケージの提供を開始しました。
  • [Windows] バンドルしているGroongaを10.0.8にアップグレードしました。

  • [Ubuntu], [Debian] WALのサポートが無効になっていた問題を修正しました。

  • WALを書き込んだ時にPGroongaがクラッシュする可能性がある問題を修正しました。

    • pgroonga.enable_wal を有効にしている環境でのみ発生します。

おしらせ

セッション

2020年11月13日(金)にPostgreSQL Conference Japan 2020PGroonga 運用技法 ~PGroonga の WAL を放置していませんか?~というセッションがあります。

このセッションは、PGroongaのWALを既に使っている人、または、これから使おうと考えている人向けの内容になっています。

まとめ

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

2020-10-29

Groonga 10.0.8リリース

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

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

変更内容

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

  • select 大きいサイズのドリルダウンのキーを使えるようになりました。

  • select 異なるテーブルを参照しているカラムを同じ動的カラムで扱えるようにしました。

  • select 検索結果のレコード数が非常に多い場合のパフォーマンスを改善しました。

  • バンドルしているLZ4を1.8.2から1.9.2に更新しました。

  • xxHash 0.8 をサポートしました。

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

  • ブラウザーベースの管理ツール関連の問題を修正しました。

  • between between(_key, …) が常にシーケンシャルサーチで評価される問題を修正しました。

さいごに

詳細については、以下のお知らせも参照してください。

お知らせ 10.0.8リリース

それでは、Groongaでガンガン検索してください!

2020-09-29

Groonga 10.0.7リリース

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

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

変更内容

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

  • [highlight], [highlight_full] ノーマライザーにオプションを指定できるようになりました。

  • return code 新しいリターンコード GRN_CONNECTION_RESET を追加しました。

    • このリターンコードは、リモートホストから強制的に接続を切断されたときに返されます。
  • Ubuntu 19.10(Eoan Ermine)のサポートをやめました。

    • このバージョンはEOLになっているためです。
  • [httpd] バンドルしているnginxのバージョンを1.19.2に更新しました。

  • grndb キーの重複を検出できるようになりました。

    • 今回のリリースから、 grndb check でキーの重複も検出できるようになりました。
    • このチェックは、 TABLE_NO_KEY のテーブル以外で有効です。
    • grndb check で重複が検出されたテーブルにインデックスカラムしかない場合は、 grndb recover で復旧できます。
  • [table_create], [column_create] 新しいオプション --path を追加しました。

  • [dump] 新しいオプション --dump_paths を追加しました。

  • 新しい関数 string_toknize() を追加しました。

    • この関数は、第二引数に指定されたカラムの値を、第一引数に指定されたトークナイザーでトークナイズします。
  • [tokenizer] 新しいトークナイザー TokenDocumentVectorTFIDF を追加しました。(実験的)

    • このトークナイザーは、TF-IDFで文書ベクトルを自動で生成します。
  • [tokenizer] 新しいトークナイザー TokenDocumentVectorBM25 を追加しました。(実験的)

    • このトークナイザーは、BM25で文書ベクトルを自動で生成します。
  • [select] 同一センテンス内での、近傍検索をサポートしました。

  • 257個のカラムに対して load を実行すると load の応答が返らなくなる問題を修正しました。

    • この問題は、10.0.4以降で発生する可能性があります。
    • この問題は、 [a, b, c, ...] の形式でデータをロードした時にのみ発生します。
      • [{...}] を使ってデータをロードした場合は発生しません。
  • [MessagePack] float32の値を正しくアンパックできない問題を修正しました。

  • マルチカラムインデックス関連の問題を修正しました。

    • _score の値が壊れることがあります。
    • ヒットしないはずのレコードがヒットすることがあります。

[highlight], highlight_full ノーマライザーにオプションを指定できるようになりました

  • highlight()highlight_full() にノーマライザーのオプションを指定できるようになりました。
  • 設定可能なオプションについては、以下を参照してください。

    • https://groonga.org/ja/docs/reference/normalizers/normalizer_nfkc100.html#parameters
  • 例えば、 unify_hyphen を使ってコードポイントの異なるハイフンを同一視できます。

    table_create Entries TABLE_NO_KEY
    column_create Entries body COLUMN_SCALAR ShortText
    
    load --table Entries
    [
    {"body": "full-text-search. Use U+002D HYPHEN-MINUS"},
    {"body": "full֊text֊search. Use U+058A ARMENIAN HYPHEN"},
    {"body": "full˗text˗search. Use U+02D7 MODIFIER LETTER MINUS SIGN"}
    ]
    
    select Entries --output_columns \
      'highlight_full(body, \
                      "NormalizerNFKC121(\\"unify_hyphen\\", true)", \
                      true, \
                      "full-text-search", \
                      "<span class=\\"keyword1\\">", \
                      "</span>")' --output-pretty yes
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            3
          ],
          [
            [
    	  "highlight_full",
    	  null
    	]
          ],
          [
            "<span class=\"keyword1\">full-text-search</span>. Use U+002D HYPHEN-MINUS"
          ],
          [
            "<span class=\"keyword1\">full֊text֊search</span>. Use U+058A ARMENIAN HYPHEN"
          ],
          [
            "<span class=\"keyword1\">full˗text˗search</span>. Use U+02D7 MODIFIER LETTER MINUS SIGN"
          ]
        ]
      ]
    ]
    
  • unify_hyphen オプションを指定しない場合、 以下のように {"body": "full-text-search. Use U+002D HYPHEN-MINUS"} のみハイライトされます。

    • その他のレコードは、検索キーワードに含まれるハイフンとコードポイントが異なるためです。
    select Entries --output_columns \
      'highlight_full(body, \
                      "NormalizerNFKC121()", \
                      true, \
                      "full-text-search", \
                      "<span class=\\"keyword1\\">", \
                      "</span>")'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
        3
      ],
      [
        [
          "highlight_full",
          null
        ]
      ],
      [
        "<span class=\"keyword1\">full-text-search</span>. Use U+002D HYPHEN-MINUS"
      ],
      [
        "full֊text֊search. Use U+058A ARMENIAN HYPHEN"
      ],
      [
        "full˗text˗search. Use U+02D7 MODIFIER LETTER MINUS SIGN"
      ]
        ]
      ]
    ]
    

table_create, column_create 新しいオプション --path を追加しました。

  • このオプションによって指定したテーブルまたは、カラムを任意のパスに格納できます。

  • このオプションは、高速なストレージ(SSDなど)によく使うテーブルやカラムを格納し、低速なストレージ(HDDなど)にあまり使わないテーブルやカラムを格納したいときに有用です。

  • このオプションは、相対パス、絶対パスの両方が指定できます。

    • 相対パスを指定した場合は、 groonga プロセスのパスを起点に指定したパスが解決されます。
  • --path を指定した場合、 dump コマンドの結果に --path の情報が含まれます。

    • したがって、 --path を指定した場合、 異なる環境のホストではリストアできなくなります。
    • --path の情報を dump に含みたくない場合は、 dump コマンド実行時に --dump_paths no を指定する必要があります。

dump 新しいオプション --dump_paths を追加しました。

  • --dump_paths オプションは --path をダンプするかどうかを制御します。

  • デフォルト値は、 yes です。

  • もし、テーブルやカラム作成時に --path を指定していて、 --path の情報を dump に含みたくない場合は、 dump コマンド実行時に --dump_pathsno を指定してください。

  • 従来の近傍検索では、同一センテンス内での検索はできませんでした。
  • 今回のリリースから同一センテンス内での検索ができます。

    table_create Memos TABLE_PAT_KEY ShortText
    column_create Memos content COLUMN_SCALAR ShortText
    
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenBigram \
      --normalizer NormalizerAuto
    column_create Terms memos_content COLUMN_INDEX|WITH_POSITION Memos content
    
    load --table Memos
    [
    {"_key":"alphabets1", "content": "a c d ."},
    {"_key":"alphabets2", "content": "a b c d e f ."},
    {"_key":"alphabets3", "content": "a b x c d e f ."},
    {"_key":"alphabets4", "content": "a b x x c d e f ."}
    ]
    
    select \
      --table Memos \
      --match_columns content \
      --query '*NP3,-1"a c .$"' \
      --output_columns _score,_key,content
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            2
          ],
          [
            [
              "_score",
              "Int32"
            ],
            [
              "_key",
              "ShortText"
            ],
            [
              "content",
              "ShortText"
            ]
          ],
          [
            1,
            "alphabets1",
            "a c d ."
          ],
          [
            1,
            "alphabets2",
            "a b x c ."
          ]
        ]
      ]
    ]
    
  • 同一センテンス内の近傍検索は、以下の構文を使います。

    • '"NP${MAX_INTERVAL},${ADDITIONAL_LAST_INTERVAL}"'${FIRST_PHRASE},${LASR_PHRASE} ${SEPARATOR}$

      • ${ADDITIONAL_LAST_INTERVAL}-1 を指定した場合、最初のフレーズと最後のフレーズの間隔が ${MAX_INTERVAL} 以下のレコードがヒットします。

        • このケースでは、最後のフレーズとセパレーターがどれほど離れていてもレコードはヒットします。
      • ${ADDITIONAL_LAST_INTERVAL}1 以上の整数を指定した場合は、 以下の条件のレコードがヒットします。

        • 最初のフレーズと最後のフレーズの間隔が ${MAX_INTERVAL} 以下。
        • 最初のフレーズとセパレーターの間隔が ${MAX_INTERVAL}+${ADDITIONAL_LAST_INTERVAL} 以下。
      • ${ADDITIONAL_LAST_INTERVAL}0 を指定した場合、近傍検索は従来の動作をします。

        • ${ADDITIONAL_LAST_INTERVAL} のデフォルト値は 0 です。
    • ${SEPARATOR} には任意の文字を指定できます。

マルチカラムインデックス関連の問題を修正しました。

  • _score が壊れることがあります。
  • ヒットしないはずのレコードがヒットすることがあります。

  • 例えば、以下のクエリを実行するとこの問題が発生します。

    select TABLE \
      --match_columns 'LEXICON.INDEX[10]' \
      --query 'XXX' \
      --output_columns _score
    
    • このケースでは、 LEXICON.INDEX[0] - LEXICON.INDEX[9] が未初期化でした。

      • Groongaは、検索対象のインデックスを各セクションの値が 0 かどうかで決定しています。
      • したがって、 LEXICON.INDEX[0] - LEXICON.INDEX[9] が未初期化の場合、Groongaは誤った検索対象を選択する可能性があります。

        • LEXICON.INDEX[0] - LEXICON.INDEX[9] の値が不定なためです。
      • また、 これらの値は、スコアの重みに使われます。

        • そのため、 _score の値も不定になります。
  • ただ、以下のクエリーでは、この問題は発生しません。未初期化の領域が発生しないためです。

    select TABLE \
      --match_columns 'LEXICON.INDEX[0]' \
      --query 'XXX' \
      --output_columns _score
    
  • つまり、以下のような場合にこの問題が発生します。

    • ソースカラムに abc を持つマルチカラムインデックスがある時、以下のようにセクションを指定している場合。

      • ac
      • bc
      • b のみ
      • c のみ
  • 以下の条件ではこの問題は発生しません。未初期化の領域が発生しないためです。

    • 以下のように最初のセクションから途中間を空けずに指定している場合は発生しません。

      • abc
      • ab
      • a のみ

さいごに

それでは、Groongaでガンガン検索してください!