3

CouchbaseまたはCouchDBでは、明示的なreduce関数なしでグループ化できますか? 私のクライアント コードでは、reduce がデータを受け取るのと同じように、データが渡されるようにしたいと考えています (rereduce 中であっても、すべてのマッパーが入力として使用されたと仮定します)。group=truereduce 関数を定義せずに使用すると、エラーが発生します。

$ curl http://127.0.0.1:8092/default/_design/testing1/_view/all?group=true
{"error":"query_parse_error",
 "reason":"Invalid URL parameter 'group' or 'group_level' for non-reduce view."}

ID 削減機能を追加できます。

reduce(keys,data) {return data;}

しかし、Couchbase は、私が実際には何も削減していないと不平を言っています。

{"rows":[], "errors":[
    {"from":"local","reason":"{<<"reduce_overflow_error">>,
        <<"Reduce output must shrink more rapidly: Current output: '...'
    }]}

クライアントを完全に削減したいと思います。

4

2 に答える 2

1

これは技術的な制限ではなく、論理的な制限です。これらの結果をいくらか削減しないと、結果を論理的にグループ化することはできません。これは SQL の に似ていGROUP BYます。SQL クエリに何らかの集計関数も含まれていない限り、これを使用することはできません。

于 2012-07-20T20:12:34.133 に答える
0

「identity reduce」の使用は、Couch スタイルの map reduce でよくある落とし穴です。Couch reduce システムは、次のような reduce 関数用に設計されています。

function(keys, values) {
   return values.length;
}

ID リデュースは、マップ行の複数のコピーをインデックスのないデータ構造に格納することになります。

リダクション値に関係なく、キーの一意のセットが必要なようです。その場合、_count reduce 関数を使用します。これは効率的であり、基礎となるデータに対して実行できるためです。

于 2012-08-07T19:59:37.000 に答える