Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elasticsearchのリランク最新事情

こんにちは、@shin0higuchi です😊
この記事は、Elastic Stack (Elasticsearch) Advent Calendar 2025の23日目の記事です。

昨年のアドベントカレンダーでは、Elasticsearchを用いたRAGに関する記事を執筆しました。
acro-engineer.hatenablog.com

この1年でElasticsearchの inference API と retriever はさらに成熟し、実戦投入しやすい状態になりました。今回は、重要要素の1つであるリランクについて、Elasticsearchで現状できることを整理します。

2つの選択肢:外部APIか、内部モデルか?

Elasticsearchでリランク(Reranking)を導入する際、現在は大きく2つの選択肢があります。
現場では単純な機能比較だけではなく、コスト構造とレイテンシで選ぶことも必要になってきます。

特徴 外部 Rerank API (Vertex AI, Cohere等) Local Inference (Elastic Rerank / Eland)
強み 圧倒的な知識量
LLMベースのモデルが「文脈」を深く理解する。
インフラ管理不要。
データ局所性
データが外に出ない(セキュリティ)。
ネットワーク遅延が小さい。
コスト構造 従量課金
クエリ数ベースで課金。
スパイク時にコスト増のリスクあり。
固定費
MLノード(メモリ/CPU/GPU)のインスタンス費用のみ。
利用量に比例しない。
向いている場面例 Eコマース、FAQ検索 社内文書検索(秘匿性高)、
低レイテンシが必要なAutoComplete

ここではそれぞれの使い方や特徴を見ていきましょう。

実践1:外部Rerank API とのネイティブ連携

2025年現在、Elasticsearchは Google の VertexAI サービスをネイティブサポートしています。
Googleが提供するランキングモデルを、あたかもElasticsearchの一機能のように呼び出すことが可能です。
同様に、Google以外のAWS / Azure やOpenAIなど、各ベンダーが提供するランキング/リランクモデルも、外部API連携として呼び出し対象にできます。

設定:Inference Endpointの作成

Vertex AIのランキングモデルは、`model_id` に公式のIDを指定します。代表例は次の通りです。

  • semantic-ranker-fast-004
  • semantic-ranker-default-004
  • semantic-ranker-default@latest

(fast系は低レイテンシ、default系は精度寄り。@latest は互換性に注意して運用)

PUT _inference/rerank/vertex-ranker
{
  "service": "googlevertexai",
  "service_settings": {
    "service_account_json": "<SERVICE_ACCOUNT_JSON>",
    "project_id": "<PROJECT_ID>",
    "location": "<REGION>",
    "model_id": "semantic-ranker-fast-004"
  },
  "task_settings": {
    "top_n": 10
  }
}
検索:Retrieverでの利用

検索クエリは retriever を使います。
ここで重要なのは rank_window_size です。デフォルトは10ですが、50〜100程度で検証する例もよく見かけますね。
ただし、rank_window_size を大きくしすぎるとGoogleへのAPIコストとレイテンシが跳ね上がるので、ログやA/Bで最適値を決めるのが安全かと思います。

POST /my-index/_search
{
  "retriever": {
    "text_similarity_reranker": {
      "retriever": {
        "standard": {
          "query": {
            "match": { "content": "RAG architecture trends" }
          }
        }
      },
      "field": "content",
      "inference_id": "vertex-ranker",
      "inference_text": "RAG architecture trends",
      "rank_window_size": 50,
      "min_score": 0.5
    }
  }
}

これで、Elasticsearchの1次検索結果がGoogleのサーバーに送られ、Vertex AIのランキングモデルで高精度に並び替えられて返ってきます。RAG(検索拡張生成)の前段として、極めて精度の高いドキュメントをLLMに渡したい場合に最適です(認証は `service_account_json` の設定が必須)。
とても簡単ですね。

実践2:Hugging Face / Elastic Rerank の活用

「社外にデータを出せない」「100ms以内で返したい」という場合は、Elasticsearchクラスタ内での推論(Local Inference)一択です。

2025年の今なら Elastic社純正の Elastic Rerank モデルを使うのが最も手軽かと思いますが、
日本語に特化したモデルや、独自ドメインで学習させたモデルをインポートしたい場合はHugging Faceのモデル(BGE-M3など)をElandで持ち込むのも良いと思います。
ただし、Eland取り込み時の `task_type` は `text_similarity` になる点に注意してください(rerank専用タスクはありません)。

Elandによるモデル取込みは、少し前ですがこちらの記事で書いているので是非ご覧ください。
acro-engineer.hatenablog.com


設定:Local Inference Endpoint

Elasticsearch内蔵の `elasticsearch` サービスとして定義します。スレッド数はCPUコア数に合わせて調整しましょう。

PUT _inference/rerank/my-local-elastic-ranker
{
  "service": "elasticsearch",
  "service_settings": {
    "model_id": ".rerank-v1",
    "num_allocations": 1,
    "num_threads": 4
  }
}

※ローカル推論を行う場合、MLノードのリソース確保が必要です。必要メモリはモデルと同時推論数で変動するため、最初は低い並列から始めて段階的に調整するのが安全です。

あとはVertex AIの時と同様、retriever クエリで `my-local-elastic-ranker` を指定するだけです。
アプリ側のコードを一切変えずに、バックエンドの設定だけで「Google Vertex AI」と「ローカルモデル」を切り替えられるのが、この Inference API の真骨頂と言えるでしょう。

まとめ

今回は、Elasticsearchのリランク最新事情として、外部クラウドサービスとの連携と、ローカルモデルの活用について解説しました。

  • 外部Rerank API連携: 圧倒的な精度を手軽に導入できる。RAGの切り札。
  • 自前リランク: ドメインデータで学習したモデルを運用可能。
  • Elastic Rerank / Cross-Encoder: セキュアかつ低レイテンシ。
  • Interfaceの統一: アプリ側からは同じクエリで扱える。

ここまで来ると、Elasticsearchは単なる検索エンジンにとどまらず、複数のAIモデルを統合する「AI検索オーケストレーター」のような存在になって来ていますね。

年末年始、こたつで寛ぎながら、ぜひ皆さんの環境でもリランクを試してみてください。

それでは、良いお年を!


Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com