すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ZomboDB

最終更新日:Mar 29, 2026

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 のカスタム検索演算子である ==> 演算子を使用して、インデックスに対してクエリ式を実行します。この式は、キーワード一致、フレーズ近接、および範囲フィルターを単一のクエリ内で同時にサポートします。

以下のクエリは、keywordssports または 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 ドキュメント」をご参照ください。

次のステップ