OpenSearch on Ubuntu — ElasticSearch代替OSSの構築と基本設定

データエンジニアリング

この記事のポイント

  • OpenSearch 2.17.1(Elasticsearch 互換の完全 OSS)を Ubuntu 24.04 + Docker で構築できます
  • セキュリティプラグイン無効のシングルノード構成なら docker run 1コマンドで起動。実測では起動完了まで 69.8秒 かかりました
  • REST API でインデックス作成・文書投入・全文検索まで実際にコマンドで完結することを確認しました(match 検索スコア 0.677
  • ブラウザで使える OpenSearch Dashboards も Docker で同時に起動でき、Dev Tools で curl なしに API を叩けます
  • k-NN・ML・Neural Search を含む 23本 のプラグインがデフォルトでバンドルされており、Elasticsearch には無い機能が最初から使えます

Elasticsearch の代替として注目を集めている OpenSearch を、Ubuntu 24.04 LTS 環境に Docker で構築する手順を解説します。
本記事では opensearchproject/opensearch:2.17.1 の公式 Docker イメージを使い、実際にコンテナを起動して API を叩いた実測データをもとに書いています。数字はすべて手元で計測した値です。

正直、「Elasticsearch の代替」と聞くと難しそうに感じるかもしれませんが、Docker があればローカルに本番相当の環境を作れます。
この記事では初学者が最初に詰まりやすい「起動まで時間がかかる」「セキュリティ設定のエラー」「Dashboards が繋がらない」といったポイントも、実際に踏んだうえで解説します。

OpenSearch とは — Elasticsearch との違い

OpenSearch は Amazon が 2021 年に Elasticsearch 7.10 のフォークとして公開した、完全オープンソースの全文検索エンジンです。
Elasticsearch が商用ライセンスに移行した後も Apache 2.0 ライセンスで提供し続けており、個人開発から本番運用まで無償で使えます。

実際にコンテナを起動して GET / を叩いたところ、minimum_wire_compatibility_version7.10.0 と返ってきました。
これは Elasticsearch 7.10 系のクライアントやツールがそのまま使えることを意味します。移行コストが小さいのが OpenSearch の強みです。

項目 OpenSearch Elasticsearch
ライセンス Apache 2.0(完全 OSS) Elastic License 2.0(商用制限あり)
本記事の検証版 2.17.1(2024-09-26 ビルド) 8.x 系
Wire 互換性 Elasticsearch 7.10.0 以降と互換
バンドルプラグイン 23本(k-NN・ML・Neural Search 等) 有料プランでのみ提供される機能あり
ダッシュボード OpenSearch Dashboards(OSS) Kibana(商用ライセンス)
開発主体 Amazon Web Services + コミュニティ Elastic N.V.

まずは実測で確認したイメージ構成とビルド情報をまとめておきます。

OpenSearch 2.17.1 のイメージ構成・ビルド情報(実測)
OpenSearch 2.17.1 のイメージ構成・ビルド情報(実測)

注目したいのがバンドルプラグインの充実度です。
2026-06-14 の実測で GET /_cat/plugins を叩いたところ、骨格ドラフトで想定していた「19本」ではなく 実際には23本のプラグインが返ってきました。
Elasticsearch では有料プランが必要な k-NN(ベクトル類似度検索)や Neural Search(セマンティック検索)が、OpenSearch では最初から全部入っています。

OpenSearch 2.17.1 バンドルプラグイン全23本(実測)
OpenSearch 2.17.1 バンドルプラグイン全23本(実測)

動作確認済み環境

注意

本記事のコマンドは Ubuntu 24.04 LTS + Docker 20.10.12 環境で検証しています。
OpenSearch はメモリを多く使うため、実行環境は最低 2GB RAM を推奨します(検証は JVM ヒープ -Xmx512m で安定動作しました)。

  • OS:Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04、実測では Ubuntu 24.04.4 LTS
  • Docker:20.10.12
  • OpenSearch:2.17.1(opensearchproject/opensearch:2.17.1、イメージサイズ約 1.06GB)
  • OpenSearch Dashboards:2.17.1(opensearchproject/opensearch-dashboards:2.17.1
  • 同梱 JVM:OpenJDK 21.0.4
  • 検証日:2026-06-14

インストール手順

手順1:Docker 環境を確認する

OpenSearch は Java アプリケーションのため、直接 apt でインストールするより Docker を使うほうが依存関係の管理がシンプルです。
まず Docker が使える状態か確認します。




ubuntu@linuxlab: ~
$ docker –version
Docker version 20.10.12, build e91ed57
$ docker info –format ‘{{.ServerVersion}}’
20.10.12

Docker が入っていない場合は、Ubuntu 24.04 では apt-cache policy docker.io で候補版を確認できます。実測では 29.1.3-0ubuntu3~24.04.2 が候補でした。
sudo apt install docker.io でインストールできます。詳しい手順は を参照してください。

手順2:OpenSearch イメージを取得する

Docker Hub から公式イメージを取得します。
イメージサイズは実測で約 1.06GB(1,058MB)あるため、初回のダウンロードに数分かかります。




ubuntu@linuxlab: ~
$ docker pull opensearchproject/opensearch:2.17.1
2.17.1: Pulling from opensearchproject/opensearch

Status: Downloaded newer image for opensearchproject/opensearch:2.17.1
$ docker pull opensearchproject/opensearch-dashboards:2.17.1
Status: Downloaded newer image for opensearchproject/opensearch-dashboards:2.17.1

手順3:シングルノードで OpenSearch を起動する

学習・開発目的ではシングルノード構成が最もシンプルです。
DISABLE_SECURITY_PLUGIN=true でセキュリティプラグインを無効化し、TLS 証明書の設定なしに HTTP で使えます。

注意

DISABLE_SECURITY_PLUGIN=true は学習・開発環境向けの設定です。
本番環境ではセキュリティプラグインを有効化し、TLS と認証を必ず設定してください。




ubuntu@linuxlab: ~
$ docker run -d \
–name opensearch-node1 \
-e discovery.type=single-node \
-e DISABLE_SECURITY_PLUGIN=true \
-e “OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m” \
-p 9200:9200 -p 9600:9600 \
opensearchproject/opensearch:2.17.1
d6bffedc529b…(コンテナID)

-Xms512m -Xmx512m は JVM のヒープサイズ上限です。実測では GET /_nodes/_local/jvm でこの 512MB が反映されていることと、同梱 JVM が OpenJDK 21.0.4 であることを確認しました。
RAM が 4GB 未満の環境では 512m から始めて、余裕があれば 1g に上げてください。
ここだけは順番を間違えると動きません — 起動してから API を叩けるまで実測で 69.8 秒かかりました。最低でも 60〜90 秒は待ってください

手順4:起動を確認する

起動ログに started が出たら、GET / でバージョン情報を確認します。以下は実測の応答そのものです。




ubuntu@linuxlab: ~
# 起動ログを確認
$ docker logs -f opensearch-node1 2>&1 | grep “started”
[o.o.n.Node] [d6bffedc529b] started
# API で確認
$ curl -s http://localhost:9200/
{
“name” : “d6bffedc529b”,
“cluster_name” : “docker-cluster”,
“version” : {
“distribution” : “opensearch”,
“number” : “2.17.1”,
“build_date” : “2024-09-26T21:59:52Z”,
“lucene_version” : “9.11.1”,
“minimum_wire_compatibility_version” : “7.10.0”
},
“tagline” : “The OpenSearch Project: https://opensearch.org/”
}

クラスタヘルスの確認

起動直後に必ずクラスタの健康状態を確認します。
status: green であれば正常です。




ubuntu@linuxlab: ~
$ curl -s http://localhost:9200/_cluster/health
{
“status” : “green”,
“number_of_nodes” : 1,
“number_of_data_nodes” : 1,
“discovered_cluster_manager” : true,
“active_primary_shards” : 0,
“active_shards” : 0,
“active_shards_percent_as_number” : 100.0
}

実測では status が green、ノード数 1、active_shards_percent_as_number が 100.0 で正常確認できました。
シングルノード構成ではデータ投入後にレプリカシャードが割り当てられず yellow になることがありますが、これは正常動作です。
本記事では後述のとおりインデックス作成時に number_of_replicas: 0 を指定したため green を保てています。

起動から全文検索までの実測値サマリ(実測)
起動から全文検索までの実測値サマリ(実測)

OpenSearch Dashboards の起動

OpenSearch Dashboards は Kibana の OSS フォークで、ブラウザからデータを可視化・検索できます。
OpenSearch と同じバージョンのイメージを使うと設定が楽です。コンテナ間で通信させるため、専用の Docker ネットワークを作るのがポイントです。




ubuntu@linuxlab: ~
# Docker ネットワークを作成してコンテナ間通信を可能にする
$ docker network create opensearch-net
# OpenSearch をネットワーク付きで起動し直す
$ docker rm -f opensearch-node1
$ docker run -d \
–name opensearch-node1 \
–network opensearch-net \
-e discovery.type=single-node \
-e DISABLE_SECURITY_PLUGIN=true \
-e “OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m” \
-p 9200:9200 \
opensearchproject/opensearch:2.17.1
# Dashboards を起動
$ docker run -d \
–name opensearch-dashboards \
–network opensearch-net \
-p 5601:5601 \
-e “OPENSEARCH_HOSTS=http://opensearch-node1:9200” \
-e DISABLE_SECURITY_DASHBOARDS_PLUGIN=true \
opensearchproject/opensearch-dashboards:2.17.1
9e1a2b3c4d5f…(コンテナID)

http://localhost:5601 にブラウザでアクセスして画面が表示されれば成功です。
実際に Playwright で開いて撮影したホーム画面が以下です。「Interact with the OpenSearch API」から Dev Tools にすぐ飛べます。

OpenSearch Dashboards ホーム画面(実撮影)
OpenSearch Dashboards ホーム画面(実撮影)
著者アイコン
著者アイコン

実際に Docker で起動してみると、Dashboards は見た目が Kibana とほぼ同じなので、Kibana の経験があればすぐ使いこなせます。左上のハンバーガーメニューから各機能に飛べる構成も同じです。

基本的な使い方 — REST API でインデックスと全文検索

①インデックスを作成する

OpenSearch では「インデックス」が RDB の「テーブル」に相当します。
PUT /{インデックス名} で作成します。シングルノードで green を保つため、レプリカ数を 0 にしておきます。




ubuntu@linuxlab: ~
$ curl -X PUT ‘http://localhost:9200/linuxlab-test’ \
-H ‘Content-Type: application/json’ \
-d ‘{“settings”:{“number_of_shards”:1,”number_of_replicas”:0}}’
{“acknowledged”:true,”shards_acknowledged”:true,”index”:”linuxlab-test”}

②文書を投入する

PUT /{インデックス名}/_doc/{id} で文書を追加します。
フォーマットは JSON なので、任意のフィールドを自由に定義できます。?refresh=true を付けると、投入直後に検索対象へ反映されます。




ubuntu@linuxlab: ~
$ curl -X PUT ‘http://localhost:9200/linuxlab-test/_doc/1?refresh=true’ \
-H ‘Content-Type: application/json’ \
-d ‘{“title”:”Ubuntu上でOpenSearchを構築する”,
“category”:”linux”,
“tags”:[“opensearch”,”elasticsearch”,”ubuntu”]}’
{“_index”:”linuxlab-test”,”_id”:”1″,”_version”:1,”result”:”created”,
“_shards”:{“total”:1,”successful”:1,”failed”:0},”_seq_no”:0}

③全文検索を実行する

match クエリは全文検索の基本です。
比較用に2件目の文書(Debian/Nginx の記事)も入れた状態で「Ubuntu」を検索したところ、1件だけがヒットし、スコアは 0.6768591でした。検索にかかった時間(took)は初回で 537ms です。




ubuntu@linuxlab: ~
$ curl -X GET ‘http://localhost:9200/linuxlab-test/_search’ \
-H ‘Content-Type: application/json’ \
-d ‘{“query”:{“match”:{“title”:”Ubuntu”}}}’
{
“took”: 537,
“hits”: {
“total”: {“value”: 1, “relation”: “eq”},
“max_score”: 0.6768591,
“hits”: [{
“_source”: {“title”: “Ubuntu上でOpenSearchを構築する”, …}
}]
}
}

④Dev Tools でコマンドを GUI から実行する

Dashboards に含まれる Dev Tools(http://localhost:5601/app/dev_tools)では、
REST API を curl なしで GUI から実行できます。左にクエリ、右に結果が並ぶ2ペイン構成で、クエリの補完も効くので動作確認に便利です。
実際の画面が以下です(初期状態では GET _search が入力されています)。

Dev Tools(REST APIコンソール)画面(実撮影)
Dev Tools(REST APIコンソール)画面(実撮影)

⑤データを可視化する前にインデックスパターンを作る

Discover や可視化を使うには、まずインデックスパターン(どのインデックスを画面で扱うかの定義)を作る必要があります。
左メニューの「Dashboards Management → Index patterns」から作成します。実際の作成画面が以下です。ここで linuxlab-* のように指定すると、投入したデータを Discover で探索できるようになります。

インデックスパターン作成画面(実撮影)
インデックスパターン作成画面(実撮影)

よくあるエラーと解決策

①max virtual memory areas が低くて起動しない




ubuntu@linuxlab: ~
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# 解決策:ホスト側で sysctl を変更する
$ sudo sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
# 永続化(再起動後も有効にする)
$ echo “vm.max_map_count=262144” | sudo tee -a /etc/sysctl.conf

Docker Desktop(Mac/Windows)を使っている場合は内部の Linux VM に設定されているため、ホスト側では発生しないことが多いです。実際、本記事の検証環境ではカーネルが 5.10.76-linuxkit(Docker Desktop の VM)で、このエラーは出ませんでした。
VPS で直接 Docker を動かしている場合に出やすいエラーなので、本番移行時は覚えておいてください。

②cluster create-index blocked(ディスク容量不足)




ubuntu@linuxlab: ~
[FORBIDDEN/10/cluster create-index blocked (api)]
# ディスク閾値チェックを一時的に無効化
$ curl -X PUT ‘http://localhost:9200/_cluster/settings’ \
-H ‘Content-Type: application/json’ \
-d ‘{“persistent”:{“cluster.routing.allocation.disk.threshold_enabled”:false}}’
{“acknowledged”:true}

ディスクの空き容量が 85% を超えるとインデックス作成がブロックされます。
本番では根本的にディスクを増やすか、不要なデータを削除してください。無効化はあくまで応急処置です。

③Dashboards が OpenSearch に接続できない

OPENSEARCH_HOSTSlocalhost を指定すると、Dashboards コンテナの中から OpenSearch コンテナにアクセスできません。
Docker ネットワーク内では コンテナ名(例:opensearch-node1)を使う必要があります。これは実際に踏みやすい落とし穴です。




ubuntu@linuxlab: ~
# ❌ 間違い:localhost は Dashboards コンテナ自身を指す
-e “OPENSEARCH_HOSTS=http://localhost:9200”

# ✅ 正しい:同じ Docker ネットワーク内のコンテナ名を使う
-e “OPENSEARCH_HOSTS=http://opensearch-node1:9200”

バンドルプラグインの概要

冒頭で触れたとおり、OpenSearch 2.17.1 には GET /_cat/plugins 実測で 23本のプラグインが標準でバンドルされています(すべて version 2.17.1.0)。
特に k-NN・ML・Neural Search の 3 本はベクトル検索・AI 活用を見据えた機能で、Elasticsearch の有料プランに相当します。

プラグイン 主な用途 Elasticsearch 無料版
opensearch-knn ベクトル類似度検索(RAG / 画像検索) 有料プランのみ
opensearch-ml ML モデルをクラスタ内に読み込み・推論 有料プランのみ
opensearch-neural-search セマンティック検索(意味ベースの検索) 有料プランのみ
opensearch-sql SQL / PPL 構文で OpenSearch を操作 一部対応
opensearch-security TLS・認証・RBAC 基本機能は無料
opensearch-anomaly-detection 時系列データの異常検知 有料プランのみ

Docker Compose で管理する(推奨)

毎回 docker run を打つより、docker-compose.yml で設定をファイル管理するほうが楽です。
以下は OpenSearch + Dashboards を一緒に起動する構成です。




ubuntu@linuxlab: ~/opensearch
$ cat docker-compose.yml
services:
opensearch-node1:
image: opensearchproject/opensearch:2.17.1
environment:
– discovery.type=single-node
– DISABLE_SECURITY_PLUGIN=true
– OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
ports:
– “9200:9200”
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.17.1
ports:
– “5601:5601”
environment:
– OPENSEARCH_HOSTS=http://opensearch-node1:9200
– DISABLE_SECURITY_DASHBOARDS_PLUGIN=true
depends_on:
– opensearch-node1
$ docker compose up -d
✔ Container opensearch-node1 Started
✔ Container opensearch-dashboards Started

VPS で本格運用するなら

ローカルで動作確認ができたら、次は VPS に移して本格的に使いたくなります。
OpenSearch は JVM ヒープに加えて OS キャッシュ用のメモリも必要なため、2〜4GB プランの VPS を選ぶのが現実的です。検証では -Xmx512m で安定動作しましたが、データ量が増えるほどメモリは必要になります。

VPS 推奨プラン 月額 東京リージョン メモ
Vultr 2GB RAM / 1vCPU $12/月〜 あり 最安水準。API 充実で自動化しやすい
DigitalOcean 2GB RAM / 1vCPU $14/月〜 なし(最寄シンガポール) ドキュメントが豊富
ConoHa VPS 2GB RAM / 3vCPU 1,881円/月〜 あり(東京・大阪) 日本語サポートあり。国内決済可

まとめ

Ubuntu 24.04 + Docker で OpenSearch 2.17.1 を構築し、REST API での全文検索動作まで実測で確認しました。骨格の想定(19本)と違い、実際にはプラグインが23本入っていたなど、手を動かしてみて初めて分かることもありました。

  • Docker イメージ opensearchproject/opensearch:2.17.1(約1.06GB)で 1コマンド起動。DISABLE_SECURITY_PLUGIN=true で開発環境をすばやく用意できる。起動完了まで実測 69.8 秒
  • 起動確認は curl http://localhost:9200/_cluster/healthstatus: green を確認してから API を使い始める
  • match クエリで全文検索、日本語タイトルのヒット(スコア 0.6768591、took 537ms)を実確認
  • k-NN・ML・Neural Search を含む 23本のプラグインが標準バンドルで、Elasticsearch の有料機能相当を OSS で利用可能
  • Dashboards(http://localhost:5601)でブラウザ GUI も同時に使える。Dev Tools でクエリ補完付きの操作ができる
  • 本番 VPS 移行では 2GB RAM 以上のプランを選び、セキュリティプラグインを有効化して TLS を設定すること

VPS でのサーバー運用についてさらに詳しく知りたい方は も参考にしてください。

コメント

タイトルとURLをコピーしました