2012-03-09 20 views
3

文字列値に単語やフレーズが含まれているmongodbエントリを選択する最良の方法は何ですか?私はmysqlのLIKE関数と同等のものを考えています。MongoDB - テキストの検索

WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %") 

文字列をトークン化するオプションがありますが、これはすべてのテキストのユニグラムを作成することになります。

答えて

3

MongoDBは今何の全文検索機能を持っていませんが、それは簡単ですSOLRのような外部検索エンジンを使用する。

Regexや単語ステミングなどでテキスト検索を再構築することを強くお勧めします。あなたのアプリの機能に集中する必要があります:)

私はこの組み合わせを使用しています:Mongoid,とMongoid-Sunspotです。本番環境では非常にうまく動作し、開発のセットアップも簡単です。

+0

+1これも投票することをお勧めします(これはすでに2番ですが、すべての投票に役立ちます):https://jira.mongodb.org/browse/SERVER-380 –

1

MongoDBクエリで正規表現のサポートを使用できます。次のリンク

ここ

http://docs.mongodb.org/manual/reference/operator/regex/

@利用可能詳細は二つの例は、上記のリンクの動きは、将来的に再びべきです:

db.collection.find({ field: /acme.*corp/i }); 
db.collection.find({ field: { $regex: 'acme.*corp', $options: 'i' } }); 
4

現在、Mongoは2.4以降のテキスト検索をサポートしています。 私の経験では、

http://docs.mongodb.org/manual/applications/text-search/

かなり肯定されていますが、サーバを起動setParameterをテキスト検索が を有効にした後、コレクション にインデックスを有効に続いてrunCommand関数

どういうわけかMongoDBを内蔵失敗したテキスト検索
0

で検索複合インデックスを使用していた既存のデータベースに対する私の要求を満たすことができます。私は現在mongoose-search-pluginを使用しており、うまく機能しています。これは、自然なステミングと距離アルゴリズムを使用して関連性スコアを返します。

User.search('Malaysia Car Food',{username:1},{}, function(err, u){ 
    console.log('Search Results: '+JSON.stringify(u)); 
});