Solr/MySQL と ElasticSearch/MongoDB の両方で専門的な経験があります。
検索エンジンに多くのクエリを実行する場合は、MongoDB を既にシャーディングしています (つまり、検索エンジンもシャーディングしたい場合): やりたいことが ElasticSearch で実行できない場合を除き、ElasticSearch を使用する必要があります。 . また、シャードしない場合でも使用する必要があります。
ElasticSearch は、分散環境と検索に慣れている誰かからシャーディング メカニズムをもたらす Lucene の上に新しいプロジェクトです (Shay Bannon は Compass を作成し、データグリッド エディターである Gigaspaces で働いていました)。
ElasticSearch は MongoDB と同じくらい簡単にシャード化できますが、それはさらに簡単で、ほとんどの場合、デフォルトでうまく機能すると思います。
Solrはあまり好きではありません。
- クエリ言語はまったく構造化されていません (ただし、プラグインと Lucene の場合であり、この非構造化クエリ言語を ES でも使用できると思います)。
- 適切な Solr クライアントはないと思います。Solr Java クライアントは最悪です。PHP の人たちも不満を言っているのを耳にしますが、ElasticSearch Java クライアントは非常に優れており、タイプセーフであり、非同期サポートを提供します (たとえば、Netty を使用している場合は優れています)。Solr では、多くの文字列連結を行います。
- スケーリングしにくい
- それほど新しいプロジェクトではありませんが、技術部門を持っていることを感じました。ElasticSearch は Compass から生まれたので、すべての技術部門が削除され、新鮮な新しいアプローチが採用されたと思います。
データのインポートに関しては、Solr DataImportHandler と ElasticSearch リバー (CouchDB と MongoDB) の両方の経験があります。私が言えることは:
- Solr はより多くのことを可能にしますが、非常に構造化されていない XML の方法であり、ドキュメントは、ハローの世界から出て高度な機能を使用しようとすると、実際に何が起こっているのかを理解するのにあまり役立ちません。
- ElasticSearch アプローチはよりシンプルで制限もありますが、一部のテクノロジをすぐにサポートしていますが、DataImportHandler はより複雑な SQL に適しているようです。
- 私の Solr プロジェクトでは、一部のドキュメントに対して手動のインデックス作成を使用する必要がありましたが、それは主に、必要なデータをドキュメントに非正規化できないことが原因でした (Solr プロジェクトでは MySQL を使用しています)。
Solr と ElasticSearch の両方に対応する新しい MongoDB コネクタもあります。これを早急にテストする必要があります:)
http://blog.mongodb.org/post/29127828146/introducing-mongo-connector
最終的に、私は間違いなく ElasticSearch を選択します。理由は次のとおりです。
- 今では素晴らしいコミュニティがあります
- ElasticSearch のように Solr を使用した経験のある多くの人を知っています。
- クライアント側はより安全で構造化されており、Java Futures との非同期を提供します
- どちらも、おそらく新しいコネクタを使用して MongoDB から簡単にデータをインポートできます
- 私の知る限り、Solr が行うほとんどすべてのことを実行できます (私の経験では、私は検索エンジンの専門家ではありません)。
- それは箱から出してシャーディングを追加します
- リアルタイムでスケーラブルなアプリケーションを構築するのに役立つパーコレーションを追加します (ただし、おそらく追加のメッセージング テクノロジが必要になります)。
- 私が読んだソース コードには、Solr に比べて (少なくともクライアント側では) 技術的な部分がほとんどなく、プラグインを作成するのも簡単に思えます。