Javascript 如何一次性标记化,在riak密钥筛选器中重用标记
将bitcask与riak结合使用,我在map reduce查询中使用键过滤器过滤定义良好的键名。这是一个将密钥过滤器与bitcask结合使用以实现2i功能的实验(然后比较我的应用程序使用二级索引和使用密钥过滤器的性能) 给定一个包含名称格式为Javascript 如何一次性标记化,在riak密钥筛选器中重用标记,javascript,mapreduce,riak,Javascript,Mapreduce,Riak,将bitcask与riak结合使用,我在map reduce查询中使用键过滤器过滤定义良好的键名。这是一个将密钥过滤器与bitcask结合使用以实现2i功能的实验(然后比较我的应用程序使用二级索引和使用密钥过滤器的性能) 给定一个包含名称格式为version\u type\u user\u timestamp的密钥的bucket,我最终得到的密钥如下所示 GET/riak/my_示例_bucket?keys=stream HTTP/1.1 主机:本地主机 接受:application/json
version\u type\u user\u timestamp
的密钥的bucket,我最终得到的密钥如下所示
GET/riak/my_示例_bucket?keys=stream HTTP/1.1
主机:本地主机
接受:application/json
{
“钥匙”:[
“v0.3_演示类型.1_用户12345_1375315200000”,
“v0.3_演示类型.1_用户10000_1375315200973”,
“v0.3_演示类型.4_用户00288_1375315101004”,
...
]
}
{
“钥匙”:[
“v0.3_演示类型.2_用户12777_1375315211000”,
“v0.3_演示类型.1_用户12777_1375315211782”,
“v0.3_演示类型.2_用户50121_1375315101004”,
...
]
}
...
我正在构建如下所示的关键过滤器。其思想是通过在手之前按键过滤结果来减少值查找
{
“桶”:“我的桶”,
“密钥过滤器”:[
[
“或”,
[
[
“标记化”,
"_",
2.
],
[
“情商”,
“demo.type.1”
]
],
[
[
“或”,
[
[
“标记化”,
"_",
2.
],
[
“情商”,
“demo.type.2”
]
],
[
[
“或”,
[
“标记化”,
"_",
2.
],
[
“情商”,
“demo.type.3”
]
]
]
]
]
]
]
}
这种技术是有效的,但请注意它是如何标记每个[”或“,[…],[…]]
子句上的键的。我的假设是,如果我可以标记一次,并将结果输入到或子句的管道中,所有测试标记的可接受变化的语句,那么map reduce查询的关键过滤器将做更少的工作(因此map reduce查询的过滤部分将花费更少的时间)
我尝试过像下面这样格式化请求,但这似乎不起作用
{
“桶”:“我的桶”,
“密钥过滤器”:[
[
“标记化”,
"_",
2.
],
[
“或”,
[
“情商”,
“demo.type.1”
],
[
“或”,
[
“情商”,
“demo.type.2”
],
[
“情商”,
“demo.type.3”
]
]
]
]
}
有没有一种方法可以做到这一点而不必在每个或子句中重新标记?您可能可以使用匹配项过滤器和正则表达式来获得所需的功能。我用计算机生成了一些假数据
for i in {1..100}; do curl localhost:8098/buckets/BUCKET/keys/${RANDOM}_${Text[$(($RANDOM / 8196))]}_$i -H "content-type: text/plain" -XPUT -d "$i - $RANDOM"; done
因此,BUCKET包含100个形式的键
(AB | DE | FF | RB)
然后用正则表达式构造一个查询,以随机数从1、2或8开始,中间的字符串为“de”,键索引为80或更少,类似于:
{
"inputs":{
"bucket":"BUCKET",
"key_filters":[
["matches","^[128][^_]*_DE_[1-8].?$"]
]
},
"query":[{
"map":{
"language":"javascript",
"source":"function(rObject){return [rObject.key]}"
}
}
]}
返回的
["8461_DE_69","11823_DE_34","21302_DE_83","17568_DE_6","10066_DE_22",
"1973_DE_68","15742_DE_54","8027_DE_29","25593_DE_50",
"15301_DE_43","21039_DE_63","24454_DE_39","10350_DE_42","17432_DE_11",
"15588_DE_2","16895_DE_80","28046_DE_18","14872_DE_75"]
如果您可以在正则表达式中表达您要匹配的内容,那么这可能只需要较少的步骤
对于您的示例,您可以使用以下内容:
[["matches","^[^_]*_demo[.]type[.][123]_.*$"]]