|
based on v17 (2010-10-02更新) - オリジナル 紹介Mongoは、テキスト検索やタグ付けと言った便利な機能を提供します。 multikeys (配列内の値に対するインデックス)Mongoのmultikeys機能は、配列の値に自動的にインデックスを張ることができます。この機能を使った良い例としてタグ付け(tagging)があります。アーティクルのためのオブジェクトがあり、カテゴリによってtag付けされていると仮定してください。 obj = {
name: "Apollo",
text: "Some text about Apollo moon landings",
tags: [ "moon", "apollo", "spaceflight" ]
}
そして、このオブジェクトは、 db.articles に保存されています。 次のコマンドは、 db.articles.ensureIndex( { tags: 1 } );
ドキュメントの中のtags全部にインデックスを作成します。そのドキュメントのためには、"mmon", "apollo", "spaceflight"のインデックスを作成します。 いつものように、クエリーをすることができます。 > print(db.articles.findOne( { tags: "apollo" } ).name);
Apollo
データベースは、配列のそれぞれのエントリに対してインデックスを作成します。一つの配列にたくさんの要素(数百、数千)をinsertするのはとてもコストの高い処理になることに注意してください。(上記の例では、その他の実装も同じようなコストになりますが) テキスト検索multikeysを使い、基本的な全部検索を実装するのは、かなり簡単です。推奨する方法は、すべてのキーワードを一つのフィールドに入れることです。たとえば、
{ title : "this is fun" ,
_keywords : [ "this" , "is" , "fun" ]
}
コード側で、保存する前に上記のタイトルを分割します。 このコード(MongoDBの一部ではありません)は、stemmingなどもすることに注意してください。(Mongoのコミュニティの誰かが、これをするための標準的なモジュールを書くかも。。) 全文検索エンジンとの比較このようにMongoDBは、検索機能を簡単にするおもしろい機能を持っていますが、上記の通り、これは専用の全文検索エンジンではありません。 専用のエンジンは以下のようなこともできます。
一括でのインデックスの構築は、インデックスの作成を速くしますが、リアルタイムではないという欠点もあります。MongoDBは、リアルタイムでの検索に特に向いています。伝統的なツールは、このような使い方はあまり得意ではありません。 現実世界での例The Business Insider MongoDBをblog検索機能で使っています。 Mark Watson's opinions on Java, Ruby, Lisp, AI, and the Semantic Web - rubyでの構築方法の例です。 |

IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.
These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group. blog comments powered by Disqus