Groonga
Redmine全文検索プラグインの全機能紹介!(2025年版)
Redmine全文検索プラグインに「クエリー展開」なる機能があることを先ほど知った阿部です。
ということで、全文検索プラグインにどのような機能があるのか知りたい方向けに網羅的な機能説明から構成までを紹介するのが本記事です。
(弊社のブログでも何度か紹介されている全文検索プラグインですが、機能の網羅的説明や構成の全体像を説明している記事はないので改めて説明します。)
Groongaサポートサービスの事例紹介 - Groongaのバージョンアップ
Groongaのサポートサービスを担当している阿部です。
Groongaのバージョンアップをサポートした事例を紹介します。
ハンズオン: Redmine環境に高速な全文検索プラグインを導入してみよう(PostgreSQL編)
Redmineを高速全文検索するプラグインの開発に参加している児玉です。 ククログではこれまで何度かこのプラグインについてご紹介してきましたが、今回はDebian/Ubuntu向けハンズオン形式で「手を動かして」実際に導入するまでを紹介します! (他のOSをお使いの場合は、適宜コマンドやリポジトリ登録方法を読み替えて進めてください。)
SQLで理解する!Groongaのドリルダウン入門
select max(_id) from table;
なことをGroongaでしたい阿部です。
冒頭から余談です。 SQLは大文字で書く方がよくある書き方なんですが、小文字で書く派もそれなりいて私は小文字で書くのが好きです。 大文字で書くのがめんどくさいからです。ということで、本記事ではSQLは小文字で書きます。
閑話休題。
Groongaは集計もできます。 ただちょっとややこしいので、SQLで書くとこんな感じになりますよ、ということを示して世に多いであろうSQL好きにGroongaをPRするための記事です。
PGroongaでGroongaのリソースを確認する(n_buffer_segmentsの値)
PostgreSQLのautovacuumと格闘中の阿部です。
(という出だしで始めましたが本記事ではPostgreSQLのautovacuumについては触れないので、興味があれば公式ドキュメントをご覧ください。)
今回はPGroongaからGroongaのリソースを確認する方法を紹介します。
PGroongaはインデックスとしてGroongaを使うPostgreSQLの拡張機能です。 PostgreSQLにてお手軽にゼロETLで全言語対応の超高速全文検索機能を使えるようになりますが、より専門的なチューニングなどをする場合は内部で利用しているGroongaの状況も確認する必要があります。
今回はその一例としてGroongaのn_buffer_segments
の値を確認する方法を紹介します。
Groonga用のMariaDBのutf8mb4_uca1400照合順序互換ノーマライザー
Mroongaの開発をしている須藤です。MroongaはMySQL/MariaDB/Percona Serverからいい感じにGroongaを使えるようにするストレージエンジンです。Groongaは全文検索エンジンなので、MySQL/MariaDB/Percona Serverだけで(ゼロETLで!っていうとナウいんでしょ!?)Elasticsearchとかなしにいい感じに高速高機能全文検索機能を実現できます。
そんなMroongaは10年くらい前からMariaDBにバンドルされています。MySQL・MariaDB作者のMontyさんがなんかの日本のイベントに来ていたときになんか話して「バンドルするか!」みたいな流れになったような気もするし、それとは別のところでなんやかんやしたような気もして、よく覚えていないのですが、バンドルされています。
なんだろう、思い出せないーと思ってインターネットを漁ってみたら、2014年のMyNA会で使った「MariaDBにバンドルされていないMroonga」になんか関連情報がありますね。歴史に興味がある人は眺めてみてね。
まぁ、そんなMroongaですが、MariaDBにバンドルされているMroongaの更新が大変で全然更新できていません。でも、それはまずいよねぇということでまた数年ぶりにチャレンジしています。で、今回はMroongaのコピーをMariaDBに入れるんじゃなくて、git submodule
でMroongaを入れようとしています。コピーだと、MariaDBが持っているMroongaの方にだけ最新MariaDBの対応が入って、本家のMroongaでは気づかずに「あれー新しいMariaDBでビルドできなくなってるー」みたいなことになるからです。
だいぶ前置きが長くなりましたが、MariaDBにバンドルするMroongaを更新するために、最新のMariaDBでも動くようにする作業をしています。
GroongaでApache Arrowフォーマットを使ってみるよ!
Apache Arrow東京ミートアップ2025に参加予定の阿部です。
GroongaはApache Arrowフォーマットでのデータロードと検索結果の取得に対応しています。 今回は実際にそれを使ってみる企画です。
Apache Arrowフォーマットのデータを作るところからやってみます。 次の流れで進めていきます。
- Apache Arrowフォーマットのデータを作る
- GroongaにApache Arrowフォーマットでデータをロードする
- Groongaで検索してApache Arrowフォーマットでデータを得る
Roaring bitmapsでビットより大きい情報を表現する方法
Groongaの結果セットにRoaring bitmapsを使えないか検討している須藤です。
以前、ClickHouseみたいにポスティングリストにRoaring bitmapsを使えないか検証しましたが、既存のPForDeltaの方がよかったのでやめました。しかし、結果セットには使えるかも?とは思っていました。ただ、Groongaの結果セットは「ヒットしたレコードはどれか」というビットで表現できる情報だけではなく、「ヒットしてレコードはどれで、それらのスコアはそれぞれいくつか」という「ヒットしたか」(ビットで表現できる)+「スコア」(64bit浮動小数点数で、ビットでは表現できない)というビットでは表現できない情報が必要です。そのため、使えるかも?とは思いつつ、じゃあどうやって?がわからずにそのままになっていました。
この間、なんとなくまたどうにかできないか調べてみたら、Roaring bitmapsのGo実装にはそれを実現する方法が含まれていることを見つけたので紹介します。まだGroongaでは検証していないので、Groongaで使いものになるかどうかはわかりません。
PGroongaの並列インデックス構築の並列度を最大にする方法
PGroongaのメンテナンスもしている堀本です。
PGroongaは4.0.0からPostgreSQL 17以降を使っている場合に限り、複数のCPUコアを活用してインデックスの構築を並列で実行できます。 (PostgreSQL 17より前のバージョンでは動作しないので注意してください。) 並列に実行するため、インデックス構築速度の高速化が期待できますが、場合によっては思ったほど高速にならない可能性もあります。
今回は、PGroonga 4.0.0を使ってもあまりインデックス構築が高速にならない人向けの記事です。
2025年のGroonga族の肉の日メジャーリリース!
Groongaの開発に参加している須藤です。今年も年に一度の肉の日(2月9日のこと)が来ましたね!例年通り、GroongaとMroongaはメジャーバージョンアップしました!今年はついでにPGroongaもメジャーバージョンアップしました!この一年でどのくらいGroonga・Mroonga・PGroongaがよくなったかを紹介します。
ちなみに、世間ではメジャーバージョンアップをすると互換性がなくなってアップグレードが大変!というソフトウェアが多いですが、Groonga・Mroongaは非互換なしなのでいつもどおり安心してアップグレードできます!PGroongaは非互換がありますが、普通は関係のない非互換なのでいつもどおり安心してアップグレードできます!そこらへんは後述します。