2012-02-07 21 views
12

私たちは、mongodbインスタンスの全文検索にelasticsearchを使用する戦略を開発しようとしています。フィルタとして使用したいすべてのキーは、弾性インデックスに含める必要があります。潜在的には、mongoのすべてのキーをフィルタとして使用することができます。つまり、説明のフルテキスト検索、日付と電話番号によるフィルタリングがあります。誰でも共有できるフルテキストをmongoに追加するという現実的な体験はありますか?mongodb全文検索戦略

たぶんdbとしてelasticsearchを使用できますか?

答えて

14

ElasticSearchとMongoDbを併用する理由はありません。ElasticSearchをドキュメントの別のドキュメントストレージとして使用するだけで検索する必要があります。そして、はい、あなたもdb全体としてすることができます。もちろん、ドメインモデルやその他の要因によって異なります。

ステミング、ファジー検索、複雑なワイルドカード検索が不要な場合は、mongoDbで検索できます。新しい文書が挿入されたら、それを小文字の単語に分割し、たとえば「単語」という配列に追加します。後でこの配列に対する検索要求をregexで実行できます。この正規表現でI(大文字と小文字を区別しない)オプションを使用することはできません。LIKE%ワイルドカード(またはワイルドカードなし)のみを検索できます。そうでなければ、mongoDbインデックスは検索されません。

もう一つの選択肢 - あなたはMongoDBの

別のオプションのためriverを見つけることを試みること - あなたは、Javaを使用している場合はLuceneを使用することです。おそらく、Directoryクラスを拡張して、LuceneがファイルシステムやRAMではなくMongoDbにインデックスを格納するようになるでしょう。私はこの分野で研究をしていないが、可能だと思う。

+0

おかげウマル、私たちはあなたのapprocahこれはオプションですが – stew

+0

を試してみるつもりだ、データの重みは正規表現は非効率的な選択肢を検索作るのに十分な大きさである点が存在しています。それは実際に検索インデクサーが存在する理由です。高価な検索操作をデータベースから守るという明示的な目的のために、永続ストレージを補足し、拡張します。 –

+0

正規表現でも、mongodDbはanswerで述べたようにインデックスを使用できますが、正規表現のタイプによって異なります – Anton

9

MongoDBの全文検索で、@Umarのような文字列を分割して実験した。正直なところ、そのデータベースと検索エンジンではないので、私は永続的なストレージとElasticSearchの検索エンジンの部分のためにMongoを使用します。実際には、永続的なストレージのためにPostgresqlのようなものを使い、検索したいデータを検索エンジンにプッシュします。 http://gdal.org/ogr/drv_elasticsearch.htmlは、1つのRDBMSからElasticSearchにデータをすばやくエクスポートできるドライバです。入力ソースに接続する方法であれば、GDALを使用するためにデータを地理空間にする必要はありません。

アダム