Как получить счет при использовании java-клиента cloudant?

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

Я использую облачный клиент https://github.com/cloudant/java-cloudant . Обычно для извлечения документов я использую метод findByIndex().

Теперь мое требование состоит в том, чтобы получить «только» общее количество документов, которые могут быть получены селектором, указанным в первом аргументе findByIndex().

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

Из поиска я вижу, что это возможно с помощью приведенной здесь функции сокращения: http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate

Но как мне использовать эту функцию сокращения в java-клиенте для cloudant? Есть ли другой способ добиться этого?


person Neeraj Krishna    schedule 17.04.2015    source источник


Ответы (2)


Функция findByIndex использует индексы Cloudant Query. Этот тип индекса не поддерживает возврат общего количества результатов прямо сейчас.

Ссылка http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate относится к просмотрам, другому типу индекса в Cloudant. Сокращает работу только в представлениях, а не в индексах запросов. Вам нужно будет использовать представление, как предлагает Крис Сноу, чтобы эффективно получить общее количество с помощью сокращения.

К сожалению, вы не можете использовать регулярное выражение в представлении (которое, как вы упомянули, использует селектор Cloudant Query). Однако, возможно, вы можете создать ключ в функции map представления, который позволяет выполнять тот же запрос.

person Mike Rhodes    schedule 15.09.2015

Документация для запроса представления: https://github.com/cloudant/java-cloudant#query-on-a-view

Я быстро запустил пример, используя groovysh (который использует java API) против базы данных животных учетной записи Cloudant Education.

Вы можете увидеть необработанные результаты примера запроса, нажав на этот URL в своем браузере: https://education.cloudant.com/animaldb/_design/views101/_view/diet_count?reduce=true&group=true&key=%22omnivore%22

{"rows":[
   {"key":"omnivore","value":3}
]}

Крутая программа (обратите внимание, что первые две строки с использованием Grape предназначены только для извлечения из облачной библиотеки Java):

groovy:000> import groovy.grape.Grape
groovy:000> Grape.grab(group:'com.cloudant', module:'cloudant-client', version:'1.0.1')
groovy:000> import com.cloudant.client.api.CloudantClient
groovy:000> client = new CloudantClient('education', 'education')
groovy:000> db = client.database('animaldb', false)
groovy:000> omnivores = db.view("views101/diet_count").key('omnivore').queryForInt()
===> 3

Вот эквивалентный код Java:

CloudantClient client = new CloudantClient('education', 'education');
Database db = client.database('animaldb', false);
int omnivores = db.view("views101/diet_count").key('omnivore').queryForInt();
person Chris Snow    schedule 20.04.2015
comment
Это на самом деле не помогло... У меня есть селектор на основе регулярных выражений. Мне нужен подсчет результата, который возвращает селектор. Любые идеи? - person Neeraj Krishna; 07.05.2015