Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何一次性标记化,在riak密钥筛选器中重用标记_Javascript_Mapreduce_Riak - Fatal编程技术网

Javascript 如何一次性标记化,在riak密钥筛选器中重用标记

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

将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
{
“钥匙”:[
“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]_.*$"]]