1

始めたばかりです。

私は、すべてのドキュメントとそのキーワードのビューを提供する、曇った、言葉による見解を持っています。次のようになります。

bywords = function(doc) {
    var tokens, re1,
        uniq = function(a) {
            var o = {}, i = 0, L = a.length, r = [];
            for (; i < L; i++) {
                if (a[i] !== '' && a[i] !== ' ') {
                    o[a[i]] = a[i];
                }
            }
            for (i in o) { r.push(o[i]); }
            return r;
        };

    if ( doc.observation && doc.observation !== '') {
        tokens = uniq(doc.observation.split(/( +)|\./));
        if (tokens && tokens.length > 0) {
             tokens.map(function(token) {
                 emit(token, null);
             });
         }
    }
};

(デザインドキュメントで利用できるfnはないと思うuniqueので、ビューfnはそれ自体を定義します。)

ビューの結果は次のようになります。

....
{
 "id": "doc-095141",
 "key": "Vivamus",
 "value": null
},
{
 "id": "doc-102754",
 "key": "Vivamus",
 "value": null
},
{
 "id": "doc-094047",
 "key": "volutpat",
 "value": null
},
{
 "id": "doc-092332",
 "key": "vulputate",
 "value": null
},
....

ビューには、ドキュメントの特定のフィールドの単語ごとに、ドキュメントごとに1つのアイテムがあります。

わかった...

キーによるクエリはうまく機能します。つまり、これ:

https://myserver.cloudant.com/fop/_design/baseViews/_view/bywords?key=%22amet%22

...ビューからアイテムの予想されるサブセットを返します。ほんの一握りのアイテムで、10個未満です。

一方、マルチキークエリは、ビュー内のすべてのアイテムを返します。私がこれを行う場合:

https://.../_design/baseViews/_view/bywords?keys=%5B%22amet%22%5D

...それから私はすべてのアイテムを手に入れます。多くのアイテム。私が欲しいものではありません。

GETで複数のキーを指定するにはどうすればよいですか?

私は私が欲しいstartkeyとは思わないそしてendkey。指定したセットにキーが入っているアイテムが欲しいです。


ps: JSONキー配列をPOSTするオプションについて知っています。まだ試していません。ドキュメントを読んだところ、GETを実行して、クエリ文字列に複数のキーを指定できるはずです。


編集

POSTオプションを試しました。期待どおりに動作します。つまり、このHTTPリクエストは次のようになります。

POST https://myserver.cloudant.com/fop/_design/baseViews/_view/bywords 
...headers here...

{"keys":["amet"]}

..私が返すと思っていたものを返します:一握りの一致するドキュメント。

だから、私はもうブロックされていませんが、キーを指定するためのGET/URIエンコードされたフォームがCloudantで機能しないことは私にはパズルのままです。

4

1 に答える 1

1

この問題があったことを覚えています。CouchDB の古いバグだと思います。どのバージョンのソファを実行していますか? GET1.2.0では、param を持つAがkeys機能します。IIRC バグは 1.0.x にあった

于 2012-06-28T20:08:16.327 に答える