2012-06-28 3 views
1

Просто начать.Почему мой многократный запрос GET для Cloudant возвращает все документы?

У меня есть взгляд на облачный, по словам, который обеспечивает просмотр всех документов и их ключевых слов. Это выглядит следующим образом:

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); 
      }); 
     } 
    } 
}; 

(я не думаю, что есть unique п доступный мне в разработке доке, так что вид п определяет свой собственный.)

Результата видовых выглядит например:

.... 
{ 
"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 
}, 
.... 

Для каждого слова в отдельном поле документа имеется один элемент для каждого документа.

ок ...

Запросы по ключевым работает прекрасно. Я имею в виду, это:

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: Я знаю о the option to POST a JSON keys array. Я еще не пробовал. Из моего чтения документа я должен был бы сделать GET и указать несколько ключей в строке запроса.


EDIT

Я просто попытался опцию POST. Он работает так, как ожидалось. Другими словами, этот запрос HTTP:

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

{"keys":["amet"]} 

..returns, что я ожидал, что он вернется: несколько совпадающих документов.

Итак, я больше не заблокирован, но для меня остается загадкой, что форма GET/URI для указания ключей не работает на Cloudant.

ответ

1

Я помню, что у меня была эта проблема, я думаю, что это старая ошибка в CouchDB. Какую версию дивана вы используете? A GET с параметром keys для меня сейчас в 1.2.0. IIRC ошибка была в 1.0.x

+0

Я использую Cloudant.com. Я не знаю, какую версию CouchDB они запускают. – Cheeso

+0

Просто нажмите на '/' вашего сервера, он сообщит об этой версии. – smathy

+0

'{" couchdb ":" Welcome "," version ":" 1.0.2 "," cloudant_build ":" 613 "}' Итак, может быть, эта ошибка все еще присутствует в Cloudant? У вас есть ссылка на jira для этой ошибки? – Cheeso

Смежные вопросы