Elasticsearch vs Neo4j GenAIアプリケーションに適したデータベースの選択
AI主導のアプリケーションが進化する中、これらの進化をサポートするベクトル検索機能の重要性はいくら強調してもし過ぎることはない。このブログポストでは、ベクトル検索機能を持つ2つの著名なデータベースについて説明する:Elasticsearch と Neo4j です。それぞれ、推薦エンジン、画像検索、セマンティック検索などのアプリケーションに不可欠なベクトル検索を扱うための堅牢な機能を提供しています。私たちのゴールは、開発者やエンジニアに明確な比較を提供し、どのデータベースが彼らの特定の要件に最も合致するかを決定する手助けをすることです。
ベクターデータベースとは?
Elasticsearch と Neo4j を比較する前に、まずベクターデータベースのコンセプトについて説明します;
ベクトルデータベース](https://zilliz.com/learn/what-is-vector-database)は、特に高次元のベクトルを格納し、クエリするように設計されています。ベクトルは非構造化データの数値表現です。これらのベクトルは、テキストの意味、画像の視覚的特徴、または製品属性などの複雑な情報を符号化する。効率的な類似検索を可能にすることで、ベクトルデータベースはAIアプリケーションにおいて極めて重要な役割を果たし、より高度なデータ分析と検索を可能にしている。
ベクトルデータベースの一般的なユースケースには、電子商取引の商品推奨、コンテンツ発見プラットフォーム、サイバーセキュリティにおける異常検知、医療画像分析、自然言語処理(NLP)タスクなどがある。また、AI幻覚のような問題を軽減するために、外部知識を提供することによって大規模言語モデル(LLMs)の性能を向上させる技術であるRAG(Retrieval Augmented Generation) において重要な役割を果たす。
市場には、以下のような多くの種類のベクトル・データベースがある:
- Milvus](https://zilliz.com/what-is-milvus)、Zilliz Cloud(フルマネージドMilvus)など。
- Faiss](https://zilliz.com/learn/faiss)やAnnoyのようなベクトル検索ライブラリ。
- Chroma](https://zilliz.com/blog/milvus-vs-chroma)やMilvus Liteのような軽量ベクトルデータベース。
- 小規模なベクトル検索が可能なベクトル検索アドオンを備えた従来のデータベース**。
ElasticsearchはApache Luceneベースの検索エンジンであり、Neo4jはグラフデータベースである。どちらもアドオンとしてベクトル検索を持っている。この投稿では、両者のベクトル検索機能を比較する。 ;
Elasticsearch:概要とコアテクノロジー
Elasticsearch は Apache Lucene ライブラリ上に構築されたオープンソースの検索エンジンです。リアルタイムのインデックス作成と全文検索で知られているため、重いアプリケーションやログ分析に最適な検索エンジンです。Elasticsearchを使えば、大量のデータを高速かつ効率的に検索・分析することができます。
Elasticsearchは検索と分析のために構築され、ファジー検索、フレーズマッチ、関連性ランキングなどの機能を備えています。複雑な検索クエリやリアルタイムのデータ検索が必要なシナリオに最適です。AIアプリケーションの台頭により、Elasticsearchはベクトル検索機能を追加し、画像認識、文書検索、Generative AIなどのAIユースケースに必要な類似検索や意味検索ができるようになりました。
ベクター検索
ベクター検索は Apache Lucene を通して Elasticsearch に統合されている。Lucene は定期的にマージされる不変のセグメントにデータを整理し、ベクターは他のデータ構造と同じようにセグメントに追加されます。このプロセスでは、インデックスを作成する際にベクタをメモリ上にバッファリングし、 必要なときにバッファをセグメントの一部としてシリアライズします。セグメントを定期的にマージして最適化を行い、すべてのセグメントでヒットしたベクターを検索します。
Elasticsearch はベクトルのインデックス作成に HNSW (Hierarchical Navigable Small World) アルゴリズムを使用しており、類似したベクトル同士をつなげたグラフを作成します。HNSWはシンプルで、強力なベンチマーク性能を持ち、インデックスの完全な再学習を必要とせずにインクリメンタルな更新に対応できることから選ばれました。このシステムは、通常数十ミリ秒から数百ミリ秒でベクトル検索を実行し、総当たりアプローチよりもはるかに高速である。
Elasticsearch の技術的なアーキテクチャは最大の強みの一つである。このシステムは同時インデックス作成中であってもロックフリー検索をサポートし、ドキュメントの更新時には異なるフィールド間で厳格な一貫性を維持する。そのため、ベクトルフィールドとキーワードフィールドの両方を更新した場合、検索はすべての古い値かすべての新しい値のどちらかを見ることになり、データの一貫性が保証される。システムは利用可能なRAMを超えて拡張することができますが、ベクターデータがメモリに収まる場合にパフォーマンスが最適化されます。
コアとなるベクトル検索機能だけでなく、Elasticsearchは実用的な統合機能を提供し、その価値を高めています。ベクトル検索は従来のElasticsearchのフィルタと組み合わせることができるので、ベクトルの類似性と全文検索結果をミックスしたハイブリッド検索を行うことができます。ベクトル検索は Elasticsearch のセキュリティ機能、アグリゲーション、インデックスソートと完全に互換性があるため、最新の検索ユースケースに対応する完全なソリューションです。
Neo4J: 基礎編
Neo4j のベクトル検索では、グラフ全体から類似データを検索するためのベクトルインデックスを作成することができます。これらのインデックスは、ベクトル埋め込み(テキスト、画像、音声のようなデータの意味をとらえた数値表現)を含むノード・プロパティで動作します。システムは4096次元までのベクトルと、コサインおよびユークリッド類似性関数をサポートしている。
この実装では、HNSW(Hierarchical Navigable Small World)グラフを使用して、高速な近似k-最近傍検索を行う。ベクトル・インデックスに問い合わせを行う際、検索したい近傍ノードの数を指定すると、システムは類似度スコア順にマッチするノードを返す。これらのスコアは0~1で、高いほど類似度が高い。HNSWアプローチは、類似ベクトル間のつながりを保持し、システムがベクトル空間の異なる部分に素早くジャンプできるようにすることでうまく機能します。
ベクトル・インデックスの作成と使用は、クエリ言語を通して行います。CREATE VECTOR INDEX コマンドでインデックスを作成し、ベクトルの次元や類似関数などのパラメータを指定することができます。システムは設定された次元のベクトルだけがインデックスされることを確認します。これらのインデックスのクエリはdb.index.vector.queryNodesプロシージャで行われ、インデックス名、結果数、クエリベクトルを入力として受け取ります。
Neo4jのベクトルインデックスには、ベクトル表現を圧縮することでメモリ使用量を削減する量子化のようなパフォーマンス最適化があります。ノードあたりの最大接続数(M)や、挿入時に追跡される最近傍の数(ef_construction)などのパラメータで、インデックスの動作を調整できます。これらのパラメータによって精度と性能のバランスをとることができるが、ほとんどのユースケースではデフォルトのままで十分である。また、システムはバージョン5.18から関係ベクトルインデックスをサポートしているので、関係プロパティで類似データを検索することができる。
これにより、開発者はAIを活用したアプリケーションを構築することができる。グラフクエリとベクトル類似性検索を組み合わせることで、アプリケーションは完全一致ではなく、意味的な意味に基づいて関連データを見つけることができる。例えば、映画の推薦システムは、グラフ構造を使用して、推薦がユーザーの好みと同じジャンルまたは時代から来ることを保証しながら、類似した映画を見つけるためにプロット埋め込みベクトルを使用することができます。
主な違い
検索実装とアーキテクチャ
Elasticsearch は Apache Lucene を使用し、HNSW (Hierarchical Navigable Small World) アルゴリズムでベクトル検索を行います。データは不変のセグメントに保存され、ベクトルはインデックス時にメモリにバッファリングされる。セグメントは最適化のために定期的にマージされ、同時インデックス作成中はロックフリーで検索が行われる。Elasticsearch は、フィールドの更新に渡るデータの一貫性を保証しています。
Neo4jはベクトル検索にHNSWを使用し、最大4096次元、余弦関数、ユークリッド類似関数をサポートする。メモリ使用量を減らすために量子化が使用され、5.18からは関係ベクトルインデックスがサポートされている。精度と性能のバランスをとるために様々なパラメータを調整することができるが、ほとんどの使用例ではデフォルトで十分であろう。
データ管理機能
Elasticsearch はリアルタイムのインデックス作成と全文検索で輝きます。ベクトル検索とキーワードフィールド検索を組み合わせ、大量の半構造化データも扱えます。集計やインデックスのソート、更新時の厳密な一貫性により、複雑な検索ユースケースに最適です。
Neo4jは異なるアプローチをとり、グラフデータの関係性のために構築されている。ノードのプロパティにベクトルインデックスを作成し、異なるデータタイプ、テキスト、画像、音声のベクトル埋め込みを処理する。グラフ指向のアーキテクチャは、グラフクエリとベクトル類似性の強力な組み合わせを可能にし、関係ベースのレコメンデーションに最適です。
パフォーマンスとスケーラビリティ
Elasticsearch は非常に高速で、ミリ秒単位でベクトル検索が可能です。ベクターデータがメモリに収まる範囲であれば最適ですが、多少のパフォーマンストレードオフを伴うものの、メモリを超えるスケールも可能です。コンカレントインデックスとセグメントマージのアプローチにより、高負荷時でも効率的です。
Neo4jのパフォーマンス・アーキテクチャは、柔軟性と効率性を重視している。ノードあたりの最大接続数や量子化などのパラメータにより、検索速度を維持しながらメモリ使用量を最適化します。高速な近似k-最近傍探索と関係ベクトルインデックスを組み合わせることで、接続されたデータ全体にわたってロバストな探索を実現します。
統合機能
Elasticsearch には多くの統合オプションがあり、特にベクトル類似検索と全文検索を組み合わせたハイブリッド検索のユースケースに最適です。セキュリティ機能が組み込まれており、様々な集計方法をサポートしているので、多くのユースケースに適しています。
Neo4jはベクトル検索をグラフクエリ言語に直接統合している。ベクトル検索用にdb.index.vector.queryNodesのような特殊なプロシージャがあり、グラフクエリとベクトルの類似性を組み合わせることができる。これは、グラフベースのベクトル検索結果のフィルタリングが検索に余分な次元を追加するAIを搭載したアプリケーションに特に最適です。
Elasticsearch をいつ使うか
Elasticsearch は大規模なドキュメントセットの検索を必要とするアプリケーション、特にテキスト検索とベクトルの類似性を組み合わせる必要があるアプリケーションに最適です。コンテンツ・レコメンデーション・システム、セマンティック・ドキュメント検索、大規模なログ分析など、何百万ものドキュメントを検索し、高速なレスポンスタイムと複数の検索条件を必要とするアプリケーションに最適です。高いインデックス作成スループットと検索可用性を扱う必要がある場合に適しており、継続的なデータ取り込みとリアルタイム検索を行うアプリケーションに最適です。
Neo4jを使うとき
Neo4jは、アプリケーションのコア・バリューが、データ・ポイント間の関係を理解し、利用することにある場合に適している。ソーシャルネットワーク、不正検知システム、推薦エンジンなど、エンティティ間のつながりがエンティティそのものと同じくらい重要なアプリケーションに最適です。グラフとベクトル検索の組み合わせは、特定のカテゴリーにおける類似商品の検索や、接続されたデータのパターンの検索のように、それらの関係やコンテキストを考慮しながら類似のアイテムを見つける必要がある場合に、特に威力を発揮する。
結論
Elasticsearch と Neo4j はどちらもベクトル検索を持っていますが、それぞれ異なるユースケースに適しています。Elasticsearch は成熟した全文検索と効率的なベクトル検索で大規模なドキュメント検索に適しており、Neo4j は関係ベースのクエリとベクトルの類似性検索を組み合わせるのに適している。ドキュメント検索が必要で、複雑な検索条件を持つ大規模データを扱えるのであればElasticsearchを、データポイント間の関係を理解しクエリすることでアプリケーションにメリットがあるのであればNeo4jを選択する。最終的な決断を下す際には、データ構造、スケール、リレーションシップがアプリケーションにとってどの程度重要であるかを考慮してください。
ElasticsearchとNeo4jの概要についてはこちらをご覧いただきたいが、これらを評価するには、ユースケースに基づいて評価する必要がある。それを手助けしてくれるツールの一つが、ベクターデータベースを比較するためのオープンソースのベンチマークツールであるVectorDBBenchだ。最終的には、独自のデータセットとクエリパターンを使って徹底的にベンチマークを行うことが、分散データベースシステムにおけるベクトル検索に対する、強力だが異なるこれら2つのアプローチのどちらを選択するかの鍵となるだろう。
オープンソースのVectorDBBenchを使ってベクトルデータベースを評価・比較する
VectorDBBenchは、高性能なデータ保存・検索システム、特にベクトルデータベースを必要とするユーザーのためのオープンソースのベンチマークツールです。このツールにより、ユーザはMilvusやZilliz Cloud(マネージドMilvus)のような異なるベクトルデータベースシステムを独自のデータセットを使ってテストし比較し、自分のユースケースに合うものを見つけることができます。VectorDBBenchを使えば、ユーザーはマーケティング上の主張や伝聞ではなく、実際のベクターデータベースのパフォーマンスに基づいて決定を下すことができます。
VectorDBBenchはPythonで書かれており、MITオープンソースライセンスの下でライセンスされています。VectorDBBenchは、その機能と性能の改善に取り組む開発者のコミュニティによって活発にメンテナンスされています。
VectorDBBenchをGitHubリポジトリ**からダウンロードして、我々のベンチマーク結果を再現したり、あなた自身のデータセットでパフォーマンス結果を得てください。
VectorDBBench Leaderboard](https://zilliz.com/vector-database-benchmark-tool?database=ZillizCloud%2CMilvus%2CElasticCloud%2CPgVector%2CPinecone%2CQdrantCloud%2CWeaviateCloud&dataset=medium&filter=none%2Clow%2Chigh&tab=1)で、主流のベクトルデータベースのパフォーマンスを簡単に見てみましょう。
ベクターデータベースの評価については、以下のブログをお読みください。
- ベンチマーク・ベクター・データベースのパフォーマンス:テクニックと洞察](https://zilliz.com/learn/benchmark-vector-database-performance-techniques-and-insights)
- VectorDBBench: Open-Source Vector Database Benchmark Tool](https://zilliz.com/learn/open-source-vector-database-benchmarking-your-way)
- ベクターデータベースを他のデータベースと比較する](https://zilliz.com/comparison)
VectorDB、GenAI、MLに関するその他のリソース
- ジェネレーティブAIリソースハブ|Zilliz](https://zilliz.com/learn/generative-ai)
- あなたのGenAIアプリのためのトップパフォーマンスAIモデル|Zilliz](https://zilliz.com/ai-models)
- RAGとは](https://zilliz.com/learn/Retrieval-Augmented-Generation)
- 大規模言語モデル(LLM)を学ぶ](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)
- ベクトルデータベース101](https://zilliz.com/learn/what-is-vector-database)
- 自然言語処理(NLP)](https://zilliz.com/learn/introduction-to-natural-language-processing-tokens-ngrams-bag-of-words-models)
読み続けて

Why Context Engineering Is Becoming the Full Stack of AI Agents
Discover how context engineering unifies prompts, RAG, and tools to build smarter, production-ready AI agents powered by Milvus.

Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch
Join us in celebrating Milvus, the vector database that hit 35.5K stars on GitHub. Discover our story and how we’re making AI solutions easier for developers.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.