cloudant,nothing found on db path


org.ektorp.DocumentNotFoundException: nothing found on db path: /cbs_track/_design/tech_demo/_view/view_location?descending=true, Response body: {"error":"not_found","reason":"missing"}
at org.ektorp.http.StdResponseHandler.createDbAccessException(StdResponseHandler.java:40)
at org.ektorp.http.StdResponseHandler.error(StdResponseHandler.java:68)
at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:122)
at org.ektorp.http.RestTemplate.getUncached(RestTemplate.java:27)
at org.ektorp.impl.DefaultQueryExecutor.executeQuery(DefaultQueryExecutor.java:49)
at org.ektorp.impl.StdCouchDbConnector.executeQuery(StdCouchDbConnector.java:441)
at org.ektorp.impl.StdCouchDbConnector.queryView(StdCouchDbConnector.java:472)
at com.ibm.cbs.services.techdemo.TechDemo.main(TechDemo.java:135)


之所以会报这个错误,是因为你的cloudant中没有创建指定文档tech_demo和指定二级索引view_location。


solution:

基于二级索引(在cloudant中叫view)的查询是在下述地址后面增加参数:

“https://<youraccount>.cloudant.com/<yourdb>/_design/<design-doc>/_view/<view-name>”

    可选的参数有descending、 endkey_docid、 group、group_level、 include_docs、 inclusive、keys、 limit、 stale等,具体请参见:

“https://docs.cloudant.com/api.html#querying-a-view”。


补充:

1. 简单介绍一下二级索引和查询:

        二级索引在Cloudant中,又被称作View,是一个通过MapReduce来计算产生的b+树索引。这个索引是通过Cloudant后台的MapReduce操作作产生的,这些操作并行的运行在所有节点上,以增量的方式更新索引,反映新增、更改以及删除的文档变化。

         创建二级索引由Map和Reduce两部分组成。Map部分通过JavaScript定义,比如下面的例子中,如果文档中存在一个叫做"type"的对象,并且它的值为"entry",就取出文档中的一个叫做userid的对象加入索引。

         Reduce部分可以用Cloudant内建的_count、_sum、_stats等操作符,可以完成一些常用的在线分析。

        对于每个数据库,可以创建任意数量的二级索引。二级索引的定义会被记录在设计文档(Design Document)中,同一个设计文档中的二级索引会被同时更新。有关二级索引的定义及方法请参见:“https://docs.cloudant.com/api.html#creating-views”。


Note:设计文档(Design Document)是一类特殊的文档,不存普通数据,存函数。

在RMDB中,索引(index)和视图(view)是完全不同的conception。cloudantDB中,虽然取名叫view,实际上是b+树索引。知道怎么用就ok了。


2. 在cloudant中,创建view:

Creating a View (Map-Reduce Index)(quote from here)

To create a view, upload a design document containing the index:

// Uploads the design document with view index:
// {
//   "_id": "_design/name",
//   "views": {
//     "view1": {
//       "map":"function(doc){emit(doc.field, 1)}",
//       "reduce": "function(key, value, rereduce){return sum(values)}"
//     }
//   }
// }

Map<String, Object> view1 = new HashMap<>();
view1.put("map", "function(doc){emit(doc.field, 1)}");
view1.put("reduce", "function(key, value, rereduce){return sum(values)}");

Map<String, Object> views = new HashMap<>();
views.put("view1", view1);

Map<String, Object> view_ddoc = new HashMap<>();
view_ddoc.put("_id", "_design/name");
view_ddoc.put("views", views);

db.save(view_ddoc);
执行,就可以在你的cloudant中xxdb的主页看到创建的doc和view了。

query是按这种方式query:https://<youraccount>.cloudant.com/<yourdb>/_design/<design-doc>/_view/<view-name>,可以跟很多参数。



你可能感兴趣的:(cloudant,nothing found on db path)