ふくふくHukuhuku Inc.
EP.06RAG 8分公開: 2026-05-10

結局のところ、RAGより全文検索+LLMの方が良かったケース

全部RAGに飛び込む前に立ち止まる。シンプルな全文検索+LLM が勝つケースとその判断基準。

#全文検索#RAG#技術選定
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

が万能のように扱われる風潮がありますが、現場では「Elasticsearch などの全文検索 + 」のほうが上手くいくケースが少なくありません。今回は逆張り回として、シンプル路線が勝つパターンを共有します。

全文検索+LLM が勝つ3パターン

  1. 1質問が「キーワード明確型」:「請求書テンプレートのファイル名」「2024年Q3の売上」など、固有名詞がはっきりしている問い合わせ
  2. 2ナレッジ規模が小〜中(〜数千件):Embeddingの強みが出にくく、全文検索のチューニングのほうが速い
  3. 3運用人員のスキル分布:Elasticsearch / OpenSearch の経験者が組織内にいて、Embeddingベクトルストアの運用ノウハウがない

比較:全文検索 vs RAG

観点全文検索 + LLM RAG
セットアップ1日(既存ESに乗せる)2〜4週間
コストES の月額のみEmbedding コスト + ベクトルDB
精度(キーワード型質問)高いやや劣る
精度(曖昧質問)やや劣る高い
運用ノウハウ豊富新しい
デバッグクエリログで容易なぜヒットしたか難解

ハイブリッド:全文検索 + の組み合わせ

結局のところ、両方やるのが現実解です。BM25(全文検索)と Embedding(ベクトル検索)の結果を Reciprocal Rank Fusion(RRF)でマージする手法は、シンプルかつ効果的。

RRF(Reciprocal Rank Fusion)の実装
Python
def rrf_merge(bm25_results, vector_results, k: int = 60):    """全文検索とベクトル検索の結果をRRFでマージ"""    scores = {}    for rank, doc in enumerate(bm25_results, start=1):        scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank)    for rank, doc in enumerate(vector_results, start=1):        scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank)    return sorted(scores.items(), key=lambda x: -x[1])
選定の判断軸(私たちの実例)

ふくふくが過去の案件で実装したパターンの内訳:純粋RAG 30% / 全文検索のみ 25% / ハイブリッド 45%。「とにかくRAG」よりも「ハイブリッドで安全策」が最多です。

でハイブリッド実装

prompt:BM25+ベクトル ハイブリッド検索
既存の Elasticsearch + 新規 Embedding ベクトルDB を組み合わせた、ハイブリッド検索を実装してください。

## 要件
1. BM25 と ベクトル検索を並列実行(asyncio.gather)
2. RRF でスコアマージ
3. 上位 k=10 を返す
4. レイテンシ計測(全体、BM25のみ、Vectorのみ)
5. ログに「どちらが優勢か」を記録

## 既存構成
@search/elasticsearch_client.py
@search/vector_db_client.py

## 出力
@search/hybrid.py
@tests/test_hybrid.py
想定される実行結果(例示)
## ハイブリッド検索 実装完了

### ファイル生成
- `search/hybrid.py` (135行) - HybridSearch クラス、asyncio で並列実行
- `search/rrf.py` (38行) - RRFマージロジック
- `tests/test_hybrid.py` (95行) - 統合テスト含む

### 計測結果(評価セット100問)
| 検索方式 | Recall@10 | MRR | P95レイテンシ |
|---|---|---|---|
| BM25 のみ | 0.71 | 0.55 | 110ms |
| Vector のみ | 0.78 | 0.62 | 290ms |
| **Hybrid (RRF)** | **0.86** | **0.71** | 320ms |

### ログから見えた傾向
- キーワード型クエリ(39%)は BM25 優勢
- 曖昧型クエリ(45%)は Vector 優勢
- 残り16%は両方が補完
- → ハイブリッドの効果が高い裏付け

PR #602 を生成しました。

次回予告

EP.07 は エージェント型RAG。「単発の検索」を超えて、AIが何度も検索をて答えに辿り着く設計を。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp