何百万ものドキュメントをMongoDBに保存することを計画しており、全文検索が非常に必要です。 ElasticsearchとSolrは、全文検索に利用できる最良のソリューションであると読みました。
Elastic Searchは、Mongodb全文検索に使用できるほど成熟していますか?また、コレクションをシャーディングしています。 ElasticsearchはShardedコレクションで機能しますか?
ElasticsearchまたはSolrを使用することの長所と短所は何ですか?
MongoDBは全文検索を実行できますか?
MongoDBにはいくつかの検索機能がありますが、検索エンジンほど機能が豊富ではありません。
http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo
コンテンツを検索可能にするために、MongoとSolrを使用しています。 Solrを好むのは
ESを使用していなかったため、ESについてはあまり言えませんでした。以下のリンクで、SolrとESに関するいくつかの議論を見つけることができます。
私はSolr/MySQLとElasticSearch/MongoDBの両方で専門的な経験があります。
検索エンジンに多くのクエリを実行する場合は、すでにMongoDBをシャーディングしています(つまり、検索エンジンもシャーディングしたい場合):ElasticSearchで実行できない場合を除いて、ElasticSearchを使用する必要があります。 。また、シャードを使用しない場合でも使用する必要があります。
ElasticSearchは、分散環境と検索に慣れている人から、シャーディングメカニズムをもたらすLucene上の新しいプロジェクトです(Shay BannonはCompassを作成し、データグリッドエディターであるGigaspacesで働いていました)。
ElasticSearchは、MongoDBと同じくらい簡単にシャーディングできます。さらに簡単で、ほとんどの場合、デフォルトでうまく機能すると思います。
Solrはあまり好きではありません。
データのインポートに関しては、Solr DataImportHandlerとElasticSearchリバー(CouchDBとMongoDB)の両方の経験があります。私があなたに言うことができるのは:
SolrとElasticSearchの両方に新しいMongoDBコネクターもあり、できるだけ早くテストする必要があります:) http://blog.mongodb.org/post/29127828146/introducing-mongo-connector
したがって、最終的には、ElasticSearchを確実に選択します。理由は次のとおりです。
ネイティブのMongoDBに関しては、全文検索はサポートされていません。これが人気のある機能リクエストであることがわかります。
https://jira.mongodb.org/browse/SERVER-38
MongoDB用のESRiverプラグインについて私が知っていることから、それはその機能のためにoplogを調整します。シャーディングされたセットアップには複数のoplogがあり、mongosを介して接続するようにそのコードを簡単に変更する方法はありません。
同様に、Solrの場合、私が見た例には通常、ESプラグインと同様の動作が含まれます。ここにいくつかのより確かな情報:
http://blog.knuthaugen.no/2010/04/cooking-with-mongodb-and-solr.html
私はこれを使用した経験はありませんが、他の人は以前に比較を行ったことがあります。ここを見てください:
MongoDBは、効率的な全文検索を実行できません。フィールドでワイルドカード検索を行うことはできますが、これらはインデックスを効率的に使用するとは思いません。
ElasticSearchの リバー機能 を使用して、ドキュメントをMongoDBからElasticSearchに自動的にプッシュすることをお勧めします。
elasticsearch-river-mongodb はMongoDBからElasticsearchへのリバーであり、MongoDBでドキュメントが変更されると、ElasticSearchはoplogを監視し、そのインデックスを自動的に更新します。
これにより、ElasticSearchはMongoのレプリケーションテーブルを監視しているだけなので、2つのデータストアの同期を維持する問題が最小限に抑えられます。
Mongoは、全文検索には適していません。明らかに、高速検索のためにフィールドにインデックスを付ける必要があり、ビッグデータ(長い長い文字列)を含むフィールドのインデックス付けはmongoで失敗します。インデックスには1kの制限があり、1kを超えるコンテンツがある場合、インデックスによって無視され、検索結果に表示されません。明らかに、記事の全文検索を実行しようとしている場合、mongoは必ずしも良い選択ではありません。
現在、MongoDB 2.4.6では、MongoDBでIS全文検索が行われ、以前のバージョンよりも機能が豊富になっています。 http:// docs。 mongodb.org/manual/core/text-search/ は、新機能の機能について説明しています。
言及する価値がある:
- インデックスの作成とテキストコマンドの実行の両方で、検索語をトークン化してステム化します。各ドキュメントにスコアを割り当てます。
- インデックス付きフィールドに検索語が含まれます。スコアは、特定の検索クエリに対するドキュメントの関連性を決定します。
ただし、この回答(2013年9月から) https://stackoverflow.com/a/18631775/1920149 ご覧のとおり、mongoはこの機能を本番環境で使用することを警告しています。この機能はまだベータ段階です。
必須フィールドにテキストインデックスを作成することにより、バージョン2.6以降のMongodbを使用した製品環境で全文検索が可能になります。 mongodbのインデックステキスト