search-ann-benchmarkにベクトル検索エンジンを追加

ベクトル検索エンジンの性能評価ツールsearch-ann-benchmarkに、4つのエンジンを追加しました。

追加したエンジン

今回追加したのは以下の4つです。

ClickHouse

ClickHouseは、高速なOLAPデータベースとして知られていますが、最近はベクトル検索機能も提供しています。今回の実装では、MergeTreeエンジンとvector_similarityインデックスを使って、HNSW(Hierarchical Navigable Small World)によるANN検索を行います。

ClickHouseはHTTPインターフェースを介して操作でき、大量のデータをバッチ処理するのに向いています。既存のClickHouse環境があれば、追加のインフラなしでベクトル検索を始められるのがメリットです。

LanceDB

LanceDBは、組み込み型のベクトルデータベースです。SQLiteのようにファイルベースで動作するため、Dockerなどのコンテナを立ち上げる必要がありません。

Python環境で直接動作するため、セットアップが簡単で、ローカル環境でのプロトタイピングやテストに便利です。IVF-PQインデックスを使った近似最近傍探索をサポートしています。

Redis Stack

Redis Stackは、RedisにベクトルDB機能を追加したものです。RediSearchモジュールを使って、HNSWインデックスによるベクトル検索ができます。

Redisはインメモリデータベースなので、検索速度は高速です。既存のRedisインフラを活用できる点と、KVストアとしての機能とベクトル検索を同じ基盤で使えるのが特徴です。

Vald

Valdは、Yahoo! JAPANが開発した分散ベクトル検索エンジンです。NGT(Neighborhood Graph and Tree)というアルゴリズムを使っており、高次元ベクトルに対して高い性能を発揮します。

Kubernetesネイティブなアーキテクチャで、大規模な分散環境での運用を想定した設計になっています。gRPCベースのAPIを提供しています。

ベンチマーク実行

各エンジンのベンチマークはGitHub Actionsで自動実行されるようになっています。手動でトリガーすることも可能で、100k、1M、5Mのデータセットサイズに対してテストできます。

これで、search-ann-benchmarkでサポートするエンジンは合計12種類になりました。

  • Elasticsearch
  • OpenSearch
  • Qdrant
  • Milvus
  • Weaviate
  • Vespa
  • pgvector
  • Chroma
  • ClickHouse(New)
  • LanceDB(New)
  • Redis Stack(New)
  • Vald(New)

ベクトル検索エンジンは選択肢が増えてきているので、自分の用途に合ったものを選ぶ際の参考になればと思います。

関連リンク

ベクトル検索エンジンの性能検証

以前からcodelibs/search-ann-benchmarkで、VespaやElasticsearchなどのベクトル検索の性能評価を行っていましたが、notebookで管理していたため、メンテしていくのも最近辛くなり、放置してました…。

放置しておくと、最近の動向などにもキャッチアップできなくなってくるので、今回、Claude Codeを使って、ipynbだったファイルたちを、uv管理のPythonプロジェクトとして、整理を行いました。Claude Codeで管理しやすくすることで、今後、各検索エンジンのバージョンアップにも追随しやすくなるはずです。

そんな感じで、再運用を始めて、ベンチマーク結果を見たら、以前は、Vespaとqdrantの2強だったのが、Elasticsearchも同等の性能が出せるようになっていました。Project Panamaとかで、Elasticsearchが追いつけるのかな?とか思っていたけど、追いついたようですね。すばらしい。OpenSearchも以前より速くなった気はするけど、まだ、何か改善が必要そうな結果ではあるので、頑張って欲しいところである。

ということで、放置していたベクトル検索の性能評価を再始動して、今後もメンテはできると思うので、興味があれば、たまに見てみてください。他にも追加できそうな検索エンジンがあれば、追加すると思います。

FessをMCPサーバーとして利用する

Fessを生成AIと連携させたいという要望が増えてきています。そこで、FessをMCP(Model Context Protocol)サーバーとして利用できるプラグインを公開しました。これにより、Claude DesktopなどのMCP対応AIクライアントからFessの検索機能を直接利用できるようになります。

MCPとは

MCPは、生成AIとデータソースを接続するためのオープンなプロトコルです。Anthropic社が策定したもので、AIアシスタントが外部のツールやデータにアクセスするための標準的な方法を提供します。

Fessをこのプロトコルに対応させることで、AIとの対話の中でFessの検索を行い、検索結果をAIの回答生成に活用できるようになります。

必要な環境

  • Fess 15.x 以降
  • Java 21 以降

インストール方法

fess-webapp-mcpプラグインをインストールすることで、FessがMCPサーバーとして機能するようになります。(管理画面からもインストールできます)

  1. Maven RepositoryからプラグインのJARファイルをダウンロード
  2. ダウンロードしたJARファイルをFessのプラグインディレクトリ(app/WEB-INF/plugin/)に配置
  3. Fessを再起動

再起動後、http://<fess-server>:<port>/mcp でMCPサーバーのエンドポイントが有効になります。

Claude Desktopとの連携

このプラグインの代表的な使い方として、Claude Desktopとの連携があります。Claude Desktopの設定ファイル(claude_desktop_config.json)に以下のように設定を追加します。

{
  "mcpServers": {
    "Fess": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

設定後、Claude Desktopを再起動すると、Fessの検索機能がClaude上で利用できるようになります。

利用できる機能

MCPサーバーとして以下の機能を提供しています。

検索(search)

Fessの全文検索機能を呼び出せます。検索クエリ、件数、ソート順、言語フィルタなどのパラメータを指定できます。AIが対話の中で必要に応じて検索を実行し、その結果を回答に活用します。

インデックス統計情報(get_index_stats)

Fessに登録されているドキュメント数などのインデックス統計情報を取得できます。

設定情報の参照

Fessの各種設定情報(ラベル、パスマッピングなど)をAIが参照できるようになっています。

使い方の例

Claude Desktopで以下のような使い方ができます。

  • 「Fessで〇〇について検索して」と依頼すると、AIがFessに検索を実行し、検索結果をもとに回答を作成
  • 「社内ドキュメントから〇〇に関する情報を探して」といった自然言語での検索依頼が可能
  • 検索結果の要約や、複数の検索結果を横断した分析をAIに依頼

まとめ

fess-webapp-mcpプラグインにより、Fessの検索機能を生成AIから活用できるようになります。RAGのような大規模な仕組みを構築しなくても、既存のFess環境にプラグインを追加するだけで、AIとの連携が実現できます。

プラグインの詳細についてはGitHubを参照してください。