gpt4 book ai didi

javascript - 如何标记化一次,在 riak key 过滤器中重用标记

转载 作者:行者123 更新时间:2023-11-29 10:46:39 25 4
gpt4 key购买 nike

将 bitcask 与 riak 结合使用我定义了明确的键名称,我使用键过滤器在 map-reduce 查询中对其进行过滤。这是一个使用 bitcask 的关键过滤器来实现 2i 功能的实验(然后比较我的应用程序使用二级索引与使用关键过滤器的性能)。

Riak key filter documentation

给定一个存储桶,其中包含名称格式如 version_type_user_timestamp 的键,我最终得到如下所示的键。

GET /riak/my_example_bucket?keys=stream HTTP/1.1
Host: localhost
Accept: application/json

{
"keys": [
"v0.3_demo.type.1_user12345_1375315200000",
"v0.3_demo.type.1_user10000_1375315200973",
"v0.3_demo.type.4_user00288_1375315101004",
...
]
}
{
"keys": [
"v0.3_demo.type.2_user12777_1375315211000",
"v0.3_demo.type.1_user12777_1375315211782",
"v0.3_demo.type.2_user50121_1375315101004",
...
]
}
...

我正在构建如下所示的关键过滤器。这个想法是通过预先按键过滤结果来减少值查找。

{
"bucket": "my_example_bucket",
"key_filters": [
[
"or",
[
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.1"
]
],
[
[
"or",
[
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.2"
]
],
[
[
"or",
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.3"
]
]
]
]
]
]
]
}

此技术有效,但请注意它如何标记每个 ["or", [...], [...]] 子句上的 key 。我的假设是,如果我可以标记化一次并将结果提供给 子句的管道,所有测试接受的标记变体,那么 map-reduce 查询的关键过滤器部分将做更少的工作(因此 map-reduce 查询的过滤部分将花费更少的时间)。

我试过像下面这样格式化请求,但这似乎不起作用。

{
"bucket": "my_example_bucket",
"key_filters": [
[
"tokenize",
"_",
2
],
[
"or",
[
"eq",
"demo.type.1"
],
[
"or",
[
"eq",
"demo.type.2"
],
[
"eq",
"demo.type.3"
]
]
]
]
}

有没有一种方法可以做到这一点而无需在每个 子句中重新标记?

最佳答案

您可能可以使用 matches 获得所需的功能过滤器和正则表达式。我生成了一些假数据

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 个形式的键
<random number from 0 - 32776>_(AB|DE|FF|RB)_<number from 1 to 100>

然后我构造了一个查询,使用正则表达式来拉取随机数以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]_.*$"]]

关于javascript - 如何标记化一次,在 riak key 过滤器中重用标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com