始めたばかりです。
私は、すべてのドキュメントとそのキーワードのビューを提供する、曇った、言葉による見解を持っています。次のようになります。
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で機能しないことは私にはパズルのままです。