DEV Community

スシロー
スシロー

Posted on

【2026】Algolia 代替の全文検索SaaS比較:料金・移行コストで選ぶ

結論(おすすめ1つ)

Algolia からの乗り換え先は Typesense(Cloud またはセルフホスト)を推奨する。

Algolia と API 設計が最も近く、公式提供の typesense-instantsearch-adapter を使えば既存の InstantSearch UI コンポーネントをほぼそのまま流用できる。オープンソース版はセルフホストが無料で、SaaS 版にも無料枠が存在する。フロントエンド改修コストが他の代替ツールより圧倒的に小さいため、チームへの影響を最小化しながら移行できる点が決め手だ。


比較表(料金/無料枠/移行コスト/対応言語)

ツール 料金体系 無料枠 移行コスト 日本語対応
Typesense Cloud ドキュメント数・帯域課金 あり(公式の料金ページで要確認) 低(Algolia API と高互換) あり(locale 指定で精度向上)
Meilisearch Cloud インデックスサイズ・帯域課金 あり(公式の料金ページで要確認) 中(独自 API、SDK は充実) あり(v1.x から標準対応)
Elasticsearch / Elastic Cloud ノード数・容量課金 14日間トライアルのみ 高(クエリ DSL を全書き直し) あり(Kuromoji プラグイン)
OpenSearch (AWS Managed) EC2/managed インスタンス課金 AWS 無料枠の範囲(公式で要確認) 高(ES と類似だが設定差異あり) あり(Nori / Kuromoji)
Postgres FTS 既存 DB コストのみ 追加費用なし 低(DB 内完結) 設定次第(pg_bigm 推奨)

料金・無料枠の具体的な上限はすべて変動するため、移行前に各サービスの公式料金ページで必ず確認すること。


移行手順

Algolia から Typesense Cloud へ移行する最短ルートを示す。

Step 1: Typesense でコレクション(インデックス)を定義する

curl -X POST 'https://<YOUR_CLUSTER>.typesense.net/collections' \
  -H 'X-TYPESENSE-API-KEY: <ADMIN_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "products",
    "fields": [
      { "name": "id",          "type": "string" },
      { "name": "title",       "type": "string", "locale": "ja" },
      { "name": "description", "type": "string", "locale": "ja" },
      { "name": "price",       "type": "float"  }
    ],
    "default_sorting_field": "price"
  }'
Enter fullscreen mode Exit fullscreen mode

Step 2: Algolia からデータをエクスポートして Typesense にインポートする

# Algolia CLI で既存インデックスを JSONL にエクスポート
npm install -g @algolia/cli
algolia objects export --index-name products --output algolia_export.jsonl

# typesense Node.js クライアントでバルクインポート
npm install typesense
node -e "
const Typesense = require('typesense');
const fs = require('fs');
const lines = fs.readFileSync('./algolia_export.jsonl', 'utf8')
  .split('\n').filter(Boolean).map(JSON.parse);
const client = new Typesense.Client({
  nodes: [{ host: '<YOUR_CLUSTER>.typesense.net', port: 443, protocol: 'https' }],
  apiKey: '<ADMIN_KEY>',
  connectionTimeoutSeconds: 5,
});
client.collections('products').documents().import(lines, { action: 'upsert' })
  .then(r => console.log(r));
"
Enter fullscreen mode Exit fullscreen mode

Step 3: フロントエンドのクライアントを差し替える

// ── Before(Algolia) ──────────────────────────────
import algoliasearch from 'algoliasearch/lite';
const searchClient = algoliasearch('APP_ID', 'SEARCH_ONLY_KEY');

// ── After(Typesense アダプター経由) ─────────────
import TypesenseInstantSearchAdapter from 'typesense-instantsearch-adapter';

const adapter = new TypesenseInstantSearchAdapter({
  server: {
    apiKey: '<SEARCH_ONLY_KEY>',
    nodes: [{ host: '<YOUR_CLUSTER>.typesense.net', port: 443, protocol: 'https' }],
  },
  additionalSearchParameters: {
    query_by: 'title,description',
  },
});

const searchClient = adapter.searchClient;
// <InstantSearch> / <SearchBox> / <Hits> 等のコンポーネントはそのまま流用可能
Enter fullscreen mode Exit fullscreen mode

Step 4: 不要な Algolia 依存を削除する

npm uninstall algoliasearch
npm install typesense typesense-instantsearch-adapter
# .env から ALGOLIA_APP_ID / ALGOLIA_API_KEY を除去し
# TYPESENSE_HOST / TYPESENSE_API_KEY に差し替える
Enter fullscreen mode Exit fullscreen mode

向き不向き

Typesense が向くチーム・規模

  • Algolia の請求が増えてきた小〜中規模のスタートアップ
  • InstantSearch ベースの UI を維持したまま移行したい、フロントエンド比率の高いチーム
  • VPS 1台でセルフホストしてコストを固定化したい個人開発・小規模プロダクト
  • 検索インフラの運用に専任 SRE を割けない組織

Meilisearch が向くチーム・規模

  • ドキュメント数が数十万件未満で、シンプルな REST API だけで完結させたい場合
  • ローカル開発環境での DX(Docker 1コマンド起動)を最優先にしたい小規模チーム

Elasticsearch / OpenSearch が向くチーム・規模

  • ファセット・集計・ログ分析など、検索以外の複合クエリが必要な大規模サービス
  • 既存の Elastic スタック(Kibana・Logstash)との統合が前提になっているチーム

避けるべきケース

  • Typesense を避けるべき場合: 本格的なベクトル検索・複雑なジオフィルタを多用するプロダクト(機能はバージョンごとに拡張中のため、導入前に公式ドキュメントで現バージョンの対応状況を確認すること)
  • Meilisearch を避けるべき場合: 数千万件超の大規模インデックスで低レイテンシを要求するサービス
  • Postgres FTS を避けるべき場合: オートコンプリート・ファセット・タイポ補正など Algolia 相当の検索 UX を再現したいケース。DB 内完結の手軽さと引き換えに、専用エンジンの検索品質には届かない

Top comments (0)