以下はPGroongaの活用事例です。
Supabaseは、Firebaseに代わるオープンソースのサービスです。PostgreSQLデータベース、認証システム、API機能、エッジファンクション、リアルタイムサブスクリプションやストレージなど、開発者がプロダクトを作るのに必要なバックエンドの全ての機能を提供します。PosgresSQLはSupabaseの中核をなしており、PGroongaを含めて40以上の拡張機能とともにネイティブに動作しています。
https://supabase.com/blog/launch-week-6-community-day
PGroongaはマネージドサービスでは使用できませんでしたが、Supabaseを利用することでマネージドなPostgreSQLでも高速な全言語対応の全文検索ができます! Supabaseは無料のサービスプランを提供しています。PostgreSQLの運用が負担でPGroongaの使用をためらっていた人は、SupabaseでPGroongaを使ってみてください!
その他のプランやより詳しい情報は、Supabaseのウェブサイトを見てください。
SupabaseにPGroongaを組み込んだのは、PGroongaの機能が日本を含む多くの言語を扱うお客さんに役立つためです。
また、PGroongaがPostgreSQL Licenseで提供されているソフトウェアであるという点に魅力を感じています。Supabaseでは、PostgreSQL LicenseやBSD License、MIT Licenseのソフトウェアを採用してサービスを提供しオープンソースソフトウェアへ貢献しているためです。
PGroongaを含めた様々なオープンソースソフトウェアに対してのOpen Collectiveというサービスを使っての資金サポートもしています。
国文学研究資料館が公開している国書データベースでは高速な日本語全文検索を実現するためにPGroongaを使っています。
カレントアウェアネス-Eの記事E2612 – 日本古典籍を身近にする「国書データベース」も参照してください。
どのように異体字検索に対応したかを説明した動画国文研 Tech Talk Vol.1 - 痛いよ異体字、国書DBも参照してください。
Zulipはパワフルなオープンソースのグループチャットアプリケーションです。全言語対応の全文検索機能を実現するためにPGroongaを使っています。なぜなら、PostgreSQL組み込みの全文検索機能は同時に1つの言語しかサポートできないからです。PGroongaは同時にすべての言語をサポートできます。
ECサイトwajaのキーワード検索エンジンに採用しました。
PGroongaを採用した主な理由は次の通りです。
既存の検索処理と整合性を取りやすい
インデックスの追加のみで全文検索機能を付与できる
十分に高速である
同義語検索、オートコンプリート機能も備えており、運用でデータベースをメンテナンスすることで機能改善する作りになっています。
開発者のブログも読んでみてください。
当社株式会社トップスタジオは、各出版社さまの刊行物の制作(翻訳・執筆・編集・校閲・デザイン・DTPなど)をお手伝いする制作プロダクションです。
当社のこれまでの制作物を実績紹介ページでひっそりと公開しているのですが、以前よりPostgreSQLで蓄積はしていたものの、検索機能は設けていませんでした。
「どのような書籍を当社が制作しているのか来訪者さまが探しやすいよう、検索を付けたい」という営業部門からの要望を受けて、検索手法について検討しました。もちろん単純なSQL LIKE句やPostgreSQLの全文検索であるtsqueryもあるのですが、検索文字と格納文字列の正規化に頭を悩ませたり、別途形態素解析のような大掛かりなものの導入が必要になったりします。
その点、PGroongaは、インストールして拡張機能を有効化するだけで、至極簡単にセットアップできます。もともとDebian GNU/Linuxでサービスのシステムを組んでいたので、ガイドの「Debian GNU/Linuxにインストール」どおりにパッケージをインストールするだけで済みました。
スペースで区切った複数単語を羅列することによる検索絞り込みというのは、もはやコモンの知識でしょう。PGroongaの検索機能でも&@~演算子でスペース区切りがAND検索扱いになるので、当初はこの利用を考えていました。
ただ、&@~は高機能なクエリー構文を使うもので、内部用であるならともかく、AND検索だけで十分な一般の来訪者さま向けにはやりすぎな印象があります。あまりにいろいろな機能がそのまま使えてしまうと、「SQLインジェクションされてますよ」という親切なご忠告を受けそうな気がしました。
そのため、せっかくの高機能&@~演算子ですがそれは見送って、検索文字列をシンプルに分割し、単一検索の&@演算子によるマッチをANDで結合したSQLステートメントを構成して実行するようにしています。たいした工夫でもないですが、分割の文字列ルールは単純なスペース文字以外に適当に入力してもANDヒットするよう、/[\s ,,..・。、「」『』()]+/としてみました。
なお、実績紹介の内部データにはほかにも「Windows」「Linux」「オープンソース」「機械学習」といった書籍の内容に関するメタ情報タグも実は格納しているのですが、それらまで検索対象に含めてテストしてみると、来訪者さまが探したいものが薄まってしまい、希望のものでないもののほうが出やすくなってしまうという残念な結果となりました。とはいえ、登録担当者が付けているせっかくのタグをうまく使いたいので、PGroongaのスコアー機能(チュートリアルの「スコアー機能」参照)と表示の工夫で、いつか改良を試みたいと考えています。
Kelteuは、商品と買い物体験にフォーカスしたコミュニティで運営されているウィキペディアのようなアプリケーションです。このプラットフォームは、ユーザーが原産地、原料、評価、様々な場所での税金も含めた料金といった商品の詳細をしっかり探すことを可能にしています。Kelteuがあれば、買い物リストを作ったり、共有したり、どこで特定の商品を買うことができるのかを探したり、エリアによっての商品価格の履歴をみたりするといったことや、それ以外にもいろいろな機能を使うことができます。
51か国語に対応しているKelteuの強力な検索機能はPGroongaによって支えられています。
PGroongaはすべての言語に対応し、すぐに使うことができる安定した全文検索機能があることから選定しました。スピードとパフォーマンスはElasticsearchやSolrといったツールに匹敵しています。さらに、PostgreSQLの拡張として、PGroongaは既存のデータベーススタックとシームレスに統合し、追加のコンポーネントやわかりづらい統合などをする必要性をなくしてくれます。すべての検索機能は、標準のSQLクエリでアクセスすることができます。
PGroongaは効率的にスケールするもし、大きなデータセット上での複雑なクエリを使う場合でさえ高パフォーマンスを発揮します。これは、Kelteuのような多機能なアプリケーションにとってとても理想的です。
IvorySQLは先進的なOSSでPostgreSQL派生でOracle互換のデータベースです。私たちは、ユーザーに高性能で多言語対応の全文検索ソリューションを提供するためにPGroongaを統合することを選びました。IvorySQLは世界中の多くのユーザーに利用されており、多くのアプリケーションが東アジア言語を処理する必要があるため、PGroongaの「すぐに使える」機能性とあらゆる言語に対する優れたサポートが、私たちにとって最良の選択肢となりました。
PGroongaのIvorySQLとの統合は非常にスムーズでした。その卓越した検索速度と高いスケーラビリティにより、追加の複雑なアーキテクチャを必要とせずにプロプライエタリな検索エンジンに匹敵するユーザー体験を提供できます。ユーザーは単にIvorySQL内でPGroongaのインデックスを作成し、シンプルなSQLクエリを通じて簡単に高速な全文検索を利用できるため、開発や運用のハードルを大幅に下げられます。
国会議事録検索は、国会の会議録を全文検索できるサイトです。個人で開発・運用しています。1947年5月から現在までの発言約960万件を収録していて、キーワードから発言者・会議・日付をたどることができます。
全文検索はPGroongaが担当しています。発言本文のカラムにTokenBigramSplitSymbolAlphaDigitとNormalizerNFKC150でインデックスを1本作り、&@~で検索しています。約960万件に対する検索が数十ミリ秒で返ってきます。
PGroongaを選んだ理由は、PostgreSQLの外に検索エンジンを立てなくてよいことです。個人での運用なので、VPS1台(仮想6コア / メモリ8GB)に他のサイトと相乗りで載せています。検索用のサーバーをもう1台用意する余裕はなく、バックアップや監視の対象を増やしたくもありませんでした。PGroongaならインデックスを1本作るだけで済み、検索条件も通常のSQLのWHEREに書けるので、絞り込みや並べ替えを検索エンジン側とアプリ側で二重に実装する必要がありません。
運用して分かったことは記事にまとめています。
Kuroko Labs(ドイツ・ミュンヘン)は、日本語とドイツ語で製造業向けの AI エージェントを作っている会社です。日本の製造業のお客様向けに、日本語とタイ語が混在する社内資料(検品報告書など)を出典付きで検索できる基盤を作り、運用しています。拠点は3か国、利用者はおよそ5,000人です。
全文検索は PGroonga が担当しています。content 列に TokenBigram と NormalizerNFKC150 でインデックスを1本作り、&@~ で検索しています。日本語もタイ語も同じインデックスで動きます。ベクトル検索(pgvector)の結果と Reciprocal Rank Fusion で統合し、上位を Cohere Rerank に渡して最終順位を決めています。
PGroonga を選んだ理由は二つあります。ひとつは、社内資料が辞書にない語の塊だったこと。新製品の型番、社内略語、タイ語からの借用語は形態素解析の辞書に載っていません。TokenBigram なら辞書なしで拾えます。もうひとつは、PostgreSQL の外に検索エンジンを置かずに済むこと。pgvector と同じデータベースに索引を足すだけなので、バックアップと監視の対象が増えません。
型番の部分一致で一度つまずきました。既定の TokenBigram は英数字の連続をひとつのトークンにするので、QC-2031 は 203 では当たりません。私たちは索引を細かくする代わりに、型番を正規表現で抜き出して別の列に置き、前方一致で処理しています。
設計と運用の詳細は記事にまとめています。
(サービスの説明、どのようにPGroongaを使っているか、どうしてPGroongaを選んだかを教えてください。)
↑のことを https://github.com/pgroonga/pgroonga.github.io/edit/master/users/index.md で書いて教えてください。英語のページですが日本語で書いても構いません。