2015-04-17 93 views
1

我有一个要求查找文件的总数,同时执行一个查询,而无需在云中提取它们。如何在使用cloudant的java客户端时获得计数?

我使用云客户端https://github.com/cloudant/java-cloudant。一般来说,我使用“findByIndex()”方法获取文档。

现在我的要求是只获得findByIndex()的第一个参数中指定的选择器可以获取的文档的总数。

我不想获取所有文档并在客户端计数,因为这将占用所有网络带宽和内存。

从我看到它可能通过降低功能搜索这里给出: http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate

但我怎么使用这个功能减少Java客户端上cloudant?有其他方法可以实现吗?

回答

0

findByIndex函数使用Cloudant查询索引。此索引类型不支持立即返回结果总数。

链接http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate引用Views,Cloudant上的一种不同类型的索引。仅减少视图中的工作而不是查询索引。您需要使用一个视图,如Chris Snow所建议的,通过减少来有效获得总数。

不幸的是,你不能在视图中使用正则表达式(你提到你的Cloudant查询选择器使用)。但是,也许您可​​以在视图的map函数中创建一个键,以允许执行相同的查询。

1

查询视图的文档https://github.com/cloudant/java-cloudant#query-on-a-view

我赶紧使用groovysh(它使用Java API)对cloudant教育帐户的animaldb跑了一个例子。

您可以通过点击您的浏览器这个网址看看例子查询的原始结果:https://education.cloudant.com/animaldb/_design/views101/_view/diet_count?reduce=true&group=true&key=%22omnivore%22

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

的常规程序(注意使用葡萄前两行只是在cloudant 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(); 
+0

这并没有真正的帮助...我有一个基于正则表达式的选择器。我需要选择器返回结果的计数。有任何想法吗? –

相关问题