web-dev-qa-db-ja.com

MongoDBセットアップの全文検索オプション

何百万ものドキュメントをMongoDBに保存することを計画しており、全文検索が非常に必要です。 ElasticsearchとSolrは、全文検索に利用できる最良のソリューションであると読みました。

  • Elastic Searchは、Mongodb全文検索に使用できるほど成熟していますか?また、コレクションをシャーディングしています。 ElasticsearchはShardedコレクションで機能しますか?

  • ElasticsearchまたはSolrを使用することの長所と短所は何ですか?

  • MongoDBは全文検索を実行できますか?

26
atandon

MongoDBにはいくつかの検索機能がありますが、検索エンジンほど機能が豊富ではありません。

http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo

コンテンツを検索可能にするために、MongoとSolrを使用しています。 Solrを好むのは

  • 設定とカスタマイズは簡単です
  • 大規模なコミュニティがあります(これは、オープンソースツールを使用している場合に非常に役立ちます)

ESを使用していなかったため、ESについてはあまり言えませんでした。以下のリンクで、SolrとESに関するいくつかの議論を見つけることができます。

25

私はSolr/MySQLとElasticSearch/MongoDBの両方で専門的な経験があります。

検索エンジンに多くのクエリを実行する場合は、すでにMongoDBをシャーディングしています(つまり、検索エンジンもシャーディングしたい場合):ElasticSearchで実行できない場合を除いて、ElasticSearchを使用する必要があります。 。また、シャードを使用しない場合でも使用する必要があります。

ElasticSearchは、分散環境と検索に慣れている人から、シャーディングメカニズムをもたらすLucene上の新しいプロジェクトです(Shay BannonはCompassを作成し、データグリッドエディターであるGigaspacesで働いていました)。

ElasticSearchは、MongoDBと同じくらい簡単にシャーディングできます。さらに簡単で、ほとんどの場合、デフォルトでうまく機能すると思います。


Solrはあまり好きではありません。

  • クエリ言語はまったく構造化されていません(ただし、プラグインとLuceneの場合であり、この非構造化クエリ言語はESでも使用できると思います)
  • 適切なSolrクライアントはないと思います。 Solr Javaクライアントはひどいです、そして私は聞いていますPHPみんなも不平を言っていますが、ElasticSearch Javaクライアントはとても素敵です、はるかにtypesafeであり、非同期サポートを提供します(たとえば、Nettyを使用する場合は便利です)。Solrを使用すると、多くの文字列連結を実行できます。
  • スケーリングが簡単ではない
  • それほど新しいプロジェクトではないので、技術部門を感じました。 ElasticSearchはCompassから生まれたので、新しいアプローチを採用するためにすべての技術部門が廃止されたと思います。

データのインポートに関しては、Solr DataImportHandlerとElasticSearchリバー(CouchDBとMongoDB)の両方の経験があります。私があなたに言うことができるのは:

  • Solrはより多くのことを行うことを許可しますが、非常に構造化されていないXMLの方法であり、ドキュメントは、Hello Worldから出て、いくつかの高度な機能を使用しようとすると、実際に何が起こっているのかを理解するのにあまり役立ちません。
  • 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と比較して(少なくともクライアント側では)技術的な部門がほとんどなく、プラグインを作成するのは簡単なようです。
22

ネイティブの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

私はこれを使用した経験はありませんが、他の人は以前に比較を行ったことがあります。ここを見てください:

SolrとElasticSearch

ElasticSearch、Sphinx、Lucene、Solr、Xapian。どちらがどの使用法に適していますか?

7
Adam Comerford

MongoDBは、効率的な全文検索を実行できません。フィールドでワイルドカード検索を行うことはできますが、これらはインデックスを効率的に使用するとは思いません。

ElasticSearchの リバー機能 を使用して、ドキュメントをMongoDBからElasticSearchに自動的にプッシュすることをお勧めします。

elasticsearch-river-mongodb はMongoDBからElasticsearchへのリバーであり、MongoDBでドキュメントが変更されると、ElasticSearchはoplogを監視し、そのインデックスを自動的に更新します。

これにより、ElasticSearchはMongoのレプリケーションテーブルを監視しているだけなので、2つのデータストアの同期を維持する問題が最小限に抑えられます。

6
AddersUK

Mongoは、全文検索には適していません。明らかに、高速検索のためにフィールドにインデックスを付ける必要があり、ビッグデータ(長い長い文字列)を含むフィールドのインデックス付けはmongoで失敗します。インデックスには1kの制限があり、1kを超えるコンテンツがある場合、インデックスによって無視され、検索結果に表示されません。明らかに、記事の全文検索を実行しようとしている場合、mongoは必ずしも良い選択ではありません。

2
Mahendra

現在、MongoDB 2.4.6では、MongoDBでIS全文検索が行われ、以前のバージョンよりも機能が豊富になっています。 http:// docs。 mongodb.org/manual/core/text-search/ は、新機能の機能について説明しています。

言及する価値がある:

  • インデックスの作成とテキストコマンドの実行の両方で、検索語をトークン化してステム化します。各ドキュメントにスコアを割り当てます。
  • インデックス付きフィールドに検索語が含まれます。スコアは、特定の検索クエリに対するドキュメントの関連性を決定します。

ただし、この回答(2013年9月から) https://stackoverflow.com/a/18631775/1920149 ご覧のとおり、mongoはこの機能を本番環境で使用することを警告しています。この機能はまだベータ段階です。

2
Ev0oD

必須フィールドにテキストインデックスを作成することにより、バージョン2.6以降のMongodbを使用した製品環境で全文検索が可能になります。 mongodbのインデックステキスト

2
Salim Hamidi