2012-07-02 41 views
0

按照视图核对文档的CouchDBhttp://wiki.apache.org/couchdb/View_collation),成员为了物质确实为核对。我想知道是否有办法去禁用这个属性,这样整理顺序无所谓?我希望能够“搜索”我的视图,以便发出的文档能够满足该字段的所有关键字范围。平等的优先级视图排序规则CouchDB?

这里更多的是对观点整理了一些,供大家参考: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

使用多个视图的效率并不低,恰恰相反:拥有四个视图(名称,地址,年龄和电话号码)不会比使用单个视图释放所有内容的时间或内存多得多。这是在CouchDB中执行“WHERE field = value”查询的简单,直接,有效的方式。

如果您实际上正在查找“WHERE field = value AND field2 = value2”查询,那么CouchDB不会帮助您,您将需要使用Lucene。

您需要了解的是,排序规则仅描述了密钥是如何订购的。即使您可以指定任意的排序规则,您仍然必须处理以下事实:CouchDB需要您为键定义一个顺序,并且只允许您查询连续的键范围。这与多维范围查询不兼容。

+0

除了使用CouchDB Lucene,对于多字段查询,即“WHERE field = value AND field2 = value2”,我是否可以将单个视图的输出传递给另一个视图进行处理,以便多字段查询由多个视图串行计算? – AnthonyS

+0

您可以在客户端或在返回数据之前(使用[list function](http://guide.couchdb.org/draft/transforming.html))执行额外的过滤。但是,只有初始查询才能从索引中受益,所以如果有一百万个带有“field = value”的文档,数据库将不得不全部读取它们以提取那些'field2 = value2'(即使只有两个那些)。 –