在对排名记录进行大量摔跤之后,我最终确定了我的文档的基于数字的分数,我根据这些分数对其进行排序。
现在这些数字有意义,前2位数代表特定类型的文件。
因此,为了获得基于分数排序的22类文档,我只需查询视图,其中开始键为220000,结束键为229999
这一切都很棒并且有效,当我尝试使用url重写时,我的问题就出现了。
我基本上是想重新路由:
/_rewrite/rankings/{doctype}
到
/_list/rankings?startkey=xx0000&endkeyxx9999
其中xx是{doctype}
我的问题是指定重写规则:
[
{ "from":"rankings/:doctype",
"to":"_list/rankings",
"query": ??? //what will this be?
]
如何通过分别附加0000和9999来构建开始和结束键?
如何指定数值?因为使用占位符“:doctype”将导致字符串类型而不是数字类型,导致查询失败,即使我要修改我的漂亮URL以输入开始和结束键。
我通过在列表视图中过滤结果来解决这个问题(忽略了对getRow()不感兴趣的文档),我在这里担心,我现在应该担心列表函数的效率吗?
也可以自由评论我的排序策略..有兴趣知道其他人如何解决他们对couchdb的排序和切片问题
答案 0 :(得分:1)
首先,您应该在数组中单独发出类型和得分,而不是连接它们:
emit([doc.type, doc.score], doc);
然后你可以像这样重写
[
{
"from" : "rankings/:doctype",
"to" : "_list/rankings/rankings",
"query" : {
"startkey" : [":doctype", 0],
"endkey" : [":doctype", 9999]
},
"formats": {
"doctype" : "int"
}
}
]
我在CouchDB 1.1.1上进行了测试,但它确实有效。
相关文档隐藏在JIRA的这个问题中:COUCHDB-1074
如您所见,该问题于2011年4月得到解决,因此它应该适用于CouchDB 1.0.3及更高版本。