2009-09-23 10 views
10

根本的な問題 - 私の文書に"categories"タイムスタンプがあるとしましょう。私は最後の2時間以内のタイムスタンプを持っている「foo」というカテゴリ内のすべてのドキュメントをしたい場合、それは簡単です:CouchDBビューのパラメータとして複数のキー範囲

function (doc) { 
    emit([doc.category, doc.timestamp], null); 
} 

、その後、ときに私の問題が来る

GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|] 

として照会過去2時間以内にfooまたはバーのカテゴリが必要です。私が時間を気にしなかったなら、私は鍵で直接鍵を引くことができました。残念ながら、私にはそのようなオプションはありません。

私は2時間のブロックにタイムスタンプを丸めているその間にやってしまった、その後、クエリを多重化するもの:

POST server:5894/.../myview 
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]] 

それは動作しますが、私は戻りたい場合は厄介になります大量の時間(ブロックサイズとの関係で)。

複数のstartKey/endKeyペアをビューに送信する方法はありますか?キー[[]配列はキー用に投稿できますか?

答えて

4

おそらく2つのクエリを実行する方が良いでしょう。 CouchDBは、複数の同時クエリをかなりうまく処理できるので、いくつかのプロセス/スレッドをスピンオフし、fooとbarドキュメントを別々にクエリできます。

現在、CouchDBは複数の範囲クエリをサポートしていません。 ORingキーとANDingキーは、1つのクエリではほとんど実行できません。

+0

キーのポストを介してORキーを使用することもできますが、そうです。ありがとう。 – kolosy

9

これだけのことをさせるCouchDBの問題があります。私はあなたのために働くかもしれないチケットに0.10.1へのシンプルな、保証されていないパッチを添付しました。それは私の作品と私は同じようなことを行うことができます:私は日付の範囲のために複数のトラッキングのID全体のすべてのデータを、取得することができますPOSTボディに

{ 
    "keys": [ 
     { 
      "startkey": ["0240286524","2010","03","01"], 
      "endkey": ["0240286524","2010","03","07",{}] 
     }, 
     { 
      "startkey": ["0442257276","2010","03","01"], 
      "endkey": ["0442257276","2010","03","07",{}] 
     } 
    ] 
} 

group=true&group_level=1を呼び出して、結果をトラッキングIDでグループ化します。より深いグループレベルでは、ID |年、トラッキングID |年|月などをトラッキングすることでグループ化できます。

複数の接続は、私が2000を同時に作成しようと思っているので、スケーラブルではありません。新しいビューはオプションではありません。データは400GB、ビューは1つです)

問題とパッチはhttps://issues.apache.org/jira/browse/COUCHDB-523です。

3

これはCouchDBの新しいバージョンで追加されました。私はそれが古い質問です知っているが、私がいたとき、私が最初にそれを見つけた

{ 
    "queries": [ 
    { "startkey": 10, "endkey": 11 }, 
    { "startkey": 16, "endkey": 18 } 
    ] 
} 

:開始/終了キーの複数の範囲を追加するには、次のようになりますボディと、あなたのビューにPOSTリクエストを使用することができます正確にこれを探して!

+0

これについてのドキュメント参照はありますか? – Isaac

+0

まだ、私はまだそれらを持っていないので、ドキュメントにパッチを当てることを約束しました!別の例が役に立つhttps:// lornajaneなら、私はそれをブログにしました。net/posts/2017/multiple-search-keys-in-couchdb –

+0

ああ、私は、APIドキュメントがすでに存在していることを発見しました:http://docs.couchdb.org/ja/2.0.0/api /ddoc/views.html#sending-multiple-queries-to-a-view –

関連する問題