等优先级视图排序规则 CouchDB

Equal Precedence View Collation CouchDB?

本文关键字:规则 CouchDB 排序 视图 优先级      更新时间:2023-09-26

根据 CouchDBhttp://wiki.apache.org/couchdb/View_collation),成员顺序对于排序规则很重要我想知道是否有办法禁用此属性,以使排序规则顺序无关紧要?我希望能够"搜索"我的视图,以便发出的文档满足该字段的所有键范围。

以下是有关视图排序规则的更多信息,供您参考:CouchDB 在同一视图中进行排序和过滤

同样,如果可以设置 CouchDB 使得顺序对视图排序规则无关紧要,则用于 GET 请求的以下参数应仅发出文档,其中 doc.phone_number == "ZZZZZZZ" ,而现在它发出属于前 3 个键范围内的文档并完全忽略最后一个键。发生这种情况是因为最后一个键在当前排序规则方案中的优先级最低。

startkey: [null,null,null,"ZZZZZZZ"],

endkey: ["''ufff0","''ufff0","

''ufff0","ZZZZZZZZ"],

样本映射功能

 var map = function(doc) {/*                    发出的密钥                    1. 名称                    2. 地址                    3. 年龄                    3. phone_number                    */                   emit([doc.name,doc.address,doc.num_age,doc.phone_number],doc._id)                }

这是否可能,或者我是否必须创建多个视图才能执行此操作?使用多个视图似乎非常低效。

我读过CouchDB-Lucene:(如何在 couchdb 中实现复杂的搜索过滤器?我应该避免临时查看吗?)将有助于复杂的搜索,但这似乎不适用于这种情况。

使用多个视图并非低效,恰恰相反:拥有四个视图(姓名、地址、年龄和电话号码)不会比使用单个视图发出所有内容花费更多的时间或内存。这是在 CouchDB 中执行"WHERE field = value"查询的简单、直接、有效的方法。

如果你实际上正在寻找"WHERE field = value AND field2 = value2"查询,那么CouchDB将无济于事,你将需要使用Lucene。

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