2012-04-03 10 views
2

私は150万のレコードを持っています。それぞれにはテキストフィールド "body"があり、多くのテキストを含んでいます。これらのドキュメントに対して正規表現を使用してフルテキスト検索を実行していますが、データのインデックス作成とインデックス作成の間にクエリ時間に差異がないことに気づいていません。MongoDBの大きなテキストフィールドのインデックス作成はクエリを高速化するようには見えませんか?

私は

db.documents.ensureIndex({ body: 1 });

を経由して「ボディ」フィールドにインデックスをMongoDBのは、インデックスにデータをいくつかの瞬間を取って、私は

db.documents.getIndexes()

を実行したときがあった確保コレクションの "body"フィールドにインデックスがあることを示しました。しかし、クエリはインデックス作成の前後で同じ時間がかかります。私は、クエリ

db.documents.find({ body: /test/i });

を実行すると、データがインデックス化されているので

私はそれがより速く実行するために期待されます。私が行うと

db.documents.find({ body: /test/i }).explain();

モンゴは、それが身体のフィールド上BTreeCursorを使っていることを私に伝えます。

ここで何か問題がありますか?テキストデータが索引付けされた後に問合せ時間が減少しないのはなぜですか?

答えて

2

チェックインデックスと正規表現のクエリのためのドキュメント:簡単なプレフィックスクエリー(とも呼ばれる根ざした正規表現)のように/ ^プレフィックス/、インデックスを使用します データベース利用可能とするために

http://www.mongodb.org/display/DOCS/Advanced+Queries

(多くの場合、 は、LIKEのプレフィックス% ' 式のインデックスを使用するほとんどのSQLデータベースに似ています)。これは、フラグにi(大文字小文字の区別なし) がない場合にのみ機能します。

+0

私は適切にすべてをやっているように見えます。私のクエリの選択はMongoDBのために設計されていないようです。 –

+0

まったく;)MongoDBは全文検索のための良いツールではありません。 –

1

全文検索は、MongoDbが実際には適合しない専用領域です。

オープンソースの&を探しているのなら、Apache SOLRを試してみてください。私たちはこれを4年間使っており、大きな価値があります!

http://lucene.apache.org/solr/

0

あなたは、フィールド上のテキスト検索索引を作成する必要があります。

db.documents.ensureIndex({ body: "text" }); 

テキスト検索索引が作成されたら、あなたは以下のように検索することができます。

db.documents.find({ "$text": {"$search" : /test/i} }); 
関連する問題