ZomboDB は、Elasticsearch の全文検索および分析エンジンを PolarDB for PostgreSQL に直接統合します。ネイティブの PostgreSQL 全文検索(tsvector/tsquery)とは異なり、ZomboDB は関連度順の検索結果、複雑なクエリ式、および大規模データセットに対するファセット分析をサポートします。外部とのカスタム同期処理や統合コードの実装を必要としません。
ZomboDB の利用シーン
ZomboDB は、アプリケーションがネイティブの PostgreSQL 全文検索では対応できない高度な全文検索機能(例:関連度順の並び替え、近接クエリ、大規模テキストフィールドに対する集約ベースの分析)を必要とする場合に適しています。
要件が小規模テーブルにおける単純なキーワード一致に限定される場合は、ネイティブの PostgreSQL 全文検索で十分であり、外部 Elasticsearch クラスターを実行するオーバーヘッドを回避できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
PostgreSQL 11 を実行している PolarDB for PostgreSQL クラスター
実行中の Elasticsearch クラスター(ZomboDB は Elasticsearch 7.x および 8.x をサポートしていません)
Elasticsearch クラスターのエンドポイント URL(例:
http://localhost:9200/)
ZomboDB のインストールと削除
ZomboDB 拡張をインストールします。
CREATE EXTENSION zombodb;不要になった場合、拡張を削除します。
DROP EXTENSION zombodb;ZomboDB インデックスの設定とクエリ実行
この例では、テーブルの作成、Elasticsearch クラスターへの ZomboDB インデックス構築、サンプルデータの挿入、および全文検索クエリの実行手順を説明します。
ステップ 1:テーブルの作成
CREATE TABLE products (
id SERIAL8 NOT NULL PRIMARY KEY,
name text NOT NULL,
keywords varchar(64)[],
short_summary text,
long_description zdb.fulltext,
price bigint,
inventory_count integer,
discontinued boolean default false,
availability_date date
);ステップ 2:ZomboDB インデックスの作成
Elasticsearch クラスターを指すインデックスを作成します。ZomboDB は対応するリモートインデックスを管理し、PostgreSQL テーブルとの同期を維持します。
CREATE INDEX idxproducts
ON products
USING zombodb ((products.*))
WITH (url='localhost:9200/');
-- localhost:9200 をご利用の Elasticsearch クラスターエンドポイントに置き換えてください。
-- ZomboDB は Elasticsearch 7.x および 8.x をサポートしていません。ステップ 3:サンプルデータの挿入
INSERT INTO products (name, keywords, short_summary, long_description, price, inventory_count)
VALUES
('Wooden Baseball Bat', ARRAY['sports', 'outdoor'],
'Classic wooden bat for recreational play.',
'A sturdy wooden bat suitable for backyard games and casual leagues.',
4999, 120),
('Boxing Gloves', ARRAY['sports', 'box', 'training'],
'Professional boxing gloves for heavy bag training.',
'Durable leather gloves with wrist support, ideal for gym workouts.',
14999, 45),
('Running Shoes', ARRAY['footwear', 'running', 'outdoor'],
'Lightweight shoes for road and trail running.',
'Breathable mesh upper with cushioned sole for long-distance comfort.',
8999, 200);ステップ 4:ZomboDB を使用したクエリ実行
ZomboDB のカスタム検索演算子である ==> 演算子を使用して、インデックスに対してクエリ式を実行します。この式は、キーワード一致、フレーズ近接、および範囲フィルターを単一のクエリ内で同時にサポートします。
以下のクエリは、keywords に sports または box が含まれる、または long_description に「wooden away」というフレーズが 5 単語以内の近接で含まれる、かつ price が 1,000 ~ 20,000 の範囲にあるプロダクトを検索します。
SELECT *
FROM products
WHERE products ==> '(keywords:(sports OR box) OR long_description:"wooden away"~5) AND price:[1000 TO 20000]';期待される結果:価格が指定範囲内であり、キーワードまたは説明文がクエリ式を満たすため、Wooden Baseball Bat および Boxing Gloves の行が該当します。
次のステップ
「ZomboDB ドキュメント」で、高度な ZomboDB クエリ構文および集約機能について詳しくご確認ください。
その他のサポート対象プラグインについては、「PolarDB for PostgreSQL の拡張機能」をご参照ください。