根据 CouchDB 的查看整理文档( http://wiki.apache.org/couchdb/View_collation),排序的订单非常重要。我想知道是否有办法禁用这个属性,以便整理顺序无关紧要?我希望能够“搜索”我的视图,以便发出的文档满足该字段的所有键范围。
以下是有关视图整理的更多内容供您参考:CouchDB sorting and filtering in the same view
同样,如果可以设置CouchDB使得顺序与视图整理无关,那么用于 GET 请求的以下参数应该只发出 doc.phone_number ==的文档“ZZZZZZZ”,而现在它会发出落在前3个键范围内的文档,并完全忽略最后一个键。发生这种情况是因为最后一个密钥在当前整理方案中的优先级最低。
startkey :[null,null,null,“ZZZZZZZ”],
endkey :[“\ ufff0”,“\ ufff0”,“\ ufff0”,“ZZZZZZZZ”],
样本映射功能
var map = function(doc) { /* //Keys emitted 1. name 2. address 3. age 3. phone_number */ emit([doc.name,doc.address,doc.num_age,doc.phone_number],doc._id) }
这是可能的,还是我必须创建多个视图才能执行此操作?使用多个视图似乎非常无效。
我已经读过 CouchDB-Lucene :( How to realize complex search filters in couchdb? Should I avoid temporary views?)对于复杂搜索会有所帮助,但在这种情况下似乎并不适用。
答案 0 :(得分:0)
使用多个视图并不是低效的,恰恰相反:拥有四个视图(名称,地址,年龄和电话号码)将不会比单个视图发出所有内容使用更多的时间或内存。它是在CouchDB中执行“WHERE field = value”查询的简单,直接,有效的方法。
如果您实际上正在寻找“WHERE field = value AND field2 = value2”查询,那么CouchDB将无法帮助您,您将需要使用Lucene。
您需要了解排序规则仅描述了订购键的方式。即使您可以指定任何任意排序规则,您仍然需要处理CouchDB需要您定义键的顺序这一事实,并且只允许您查询连续的键范围。这与多维范围查询不兼容。