MongoDBでは、行セットのカーソルを返すfind()演算子が与えられています。「コンテキスト」行、つまり各行の前後の行を順番に返す慣用で時間効率の良い方法は何ですか?セット?MongoDB:指定された行の前後に順番に行を戻していますか?
この概念を説明する最も簡単な方法は、コンテキスト検索をサポートするackを使用することです。ファイルを考える:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
これは、ACKから出力されます:
C:\temp>ack.pl -C 2 "line 4" test.txt
line 2
line 3
line 4
line 5
line 6
私はMongoDBのコレクション内のログデータを、行ごとに一つの文書を格納しています。それぞれのログはそれぞれキーワードにトークン化され、これらのキーワードは索引付けされています。これにより安価なフルテキスト検索が可能になります。
私は沼地標準を実行します。
collection.find({keywords: {'$all': ['key1', 'key2']}}, {}).sort({datetime: -1});
とカーソルを取得します。この段階で、追加のフィールドを追加することなく、コンテキストを取得する方法は何ですか?カーソル内の行ごとに
- :私は流れのようなものだと思います
- は_idフィールドを取得し、Xに格納します。 (N)
- これらの各カーソルから結果を取得します。
- 実行:collection.findを({_ ID:{ '$のLT':X}})ソート({_ ID:1})。限界(N)
- これらの各々から結果を得ますカーソル。 R行と結果セットについて
- は_idフィールドを取得し、Xに格納します。 (N)
しかし、私は時間のためにスペースをトレードすることができると思います。バックグラウンドでコンテキストID _idを使って各行を更新することは可能ですか?現在のフィールドを持っている与えられた行の場合:
_id, contents, keywords
私は、追加のフィールド追加します。
_id, contents, keywords, context_ids
をしてから、私は、何とか、これらcontext_idsを使用することができ、その後の検索では、私が思いますか?私はまだMongoDB MapReduceに精通していませんが、それも同様に画像に入りますか?
私は、最も直接的なアプローチは、各行に実際のコンテキスト行のフルテキストを格納することだと思いますが、これは私にはやや粗悪なようです。明確な利点は、単一のクエリが必要なコンテキストを返すことができることです。
私は質問の範囲を受け入れるすべての答えを感謝します。私はLuceneや実際の全文検索エンジンを帯域外で使うことができることを認識していますが、MongoDB特有の答えに感謝するために、MongoDBの機能とエッジを理解しようとしています。ありがとう!