OpenSearch とは
一言で言うと、「高速な全文検索エンジン」 。
まず「なぜ普通のDBじゃダメなのか?」から
RDBでテキスト検索をしようとすると…
SELECT * FROM articles WHERE body LIKE '%パフォーマンス チューニング%';
これは 全行をスキャンするので、データが増えると死ぬほど遅くなる。また「パフォーマンス」と「チューニング」が離れた場所にある文章はヒットしない。
OpenSearch はこの問題を解決するために存在する。
OpenSearch の仕組み(転置インデックス)
文章を事前に単語単位で分解・索引化しておく仕組み。
「Pythonのパフォーマンスをチューニングする方法」
↓ 事前に分解して索引を作る
Python → [document_1, document_3, document_7]
パフォーマンス → [document_1, document_5]
チューニング → [document_1, document_2]
方法 → [document_1, document_4, document_9]
本の巻末索引と同じ発想。検索時に全ページをめくるのではなく、索引を引くだけなので爆速になる。
RDBとの概念対応
| RDB | OpenSearch | 説明 |
|---|---|---|
| Database | Index | データの入れ物 |
| Table | (Indexに統合) | 1 Index = 1 Table的な感覚 |
| Row | Document | 1件のデータ(JSON形式) |
| Column | Field | データの各項目 |
| Schema | Mapping | フィールドの型定義 |
基本操作のイメージ
データを入れる(インデキシング)
PUT /articles/_doc/1
{
"title": "Pythonのパフォーマンスをチューニングする方法",
"body": "プロファイリングツールを使ってボトルネックを特定し、アルゴリズムを改善する",
"tags": ["Python", "パフォーマンス"],
"published_at": "2026-03-01"
}
検索する
GET /articles/_search
{
"query": {
"match": {
"body": "パフォーマンス チューニング"
}
}
}
これだけで関連度スコア付きの結果が返ってくる。
OpenSearch の強み
1. 全文検索が得意
「パフォーマンス」「速度改善」「高速化」をある程度まとめて検索できる(アナライザー設定次第)
2. 関連度スコアリング
ただヒットするだけでなく、どれだけ関連しているかをスコアで返してくれる
3. ファセット検索
「タグ別の記事件数」「月別の投稿数」をまとめて集計できる
// 「チューニング」で検索しつつ、タグごとの件数も同時に返す
{
"query": { "match": { "body": "チューニング" } },
"aggs": {
"by_tag": {
"terms": {
"field": "tags.keyword"
}
}
}
}
4. 地理情報検索(Geo Search)
「現在地から半径2km以内のイベント」のような位置情報検索も得意
ElasticsearchとOpenSearchの関係
Elasticsearch(元祖、Elastic社が開発)
↓ 2021年にライセンス変更でOSSでなくなった
OpenSearch(AWSがフォークしてOSS継続)
APIの構造はほぼ同じなので、Elasticsearchの情報もOpenSearchにほぼ流用できます。
まとめ
- 何のため? → RDBでは辛い全文検索・高度な検索を高速に行うため
- データ形式は? → JSONドキュメント
- RDBの代替? → No。RDBと併用するのが基本(メインDBはRDB、検索用にOpenSearch)
- ElasticSearchとの違いは? → ほぼ同じ。OpenSearchはAWSが管理するOSS版