登录
首页 >  Golang >  Go问答

如何使用 Aerospike 表达式通过正则表达式搜索列表项

来源:stackoverflow

时间:2024-02-13 16:09:24 248浏览 收藏

本篇文章给大家分享《如何使用 Aerospike 表达式通过正则表达式搜索列表项》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我们正在从旧的 aerospike 版本 3.15.1.4 迁移到版本 6.2.0.7。这涉及从aerospike-client-go v4.5.2+不兼容迁移到aerospike-client-go/v6 v6.6.0。自 aerospike database 5.2 起,谓词表达式 (predexp) 已被弃用。它们在 aerospike database 6.0 中被删除。所以我们必须转向 aerospike expressions。

我们有一个容器,里面有一个字符串列表。我们希望使用“开头为”模式进行搜索。在旧世界中,我们使用以下代码来做到这一点:

as.newpredexpstringvar("v"),
as.newpredexpstringvalue("^"+regexp.quotemeta("search_term")),
as.newpredexpstringregex(queryregexoptionextended|queryregexoptionignorecase),
as.newpredexplistbin("listfield"),
as.newpredexplistiterateor("v"),

以下示例将在“新世界”中搜索精确值:

// as filter inside statement
as.newcontainsfilter("listfield", as.ict_list, "search_term")

// as filterexpression on query-policy
*as.expgreater(
    as.explistgetbyvalue(
        as.listreturntypecount,
        as.expstringval("search_term"),
        as.explistbin("listfield")),
    as.expintval(0),

但是我们如何使用新的 aerospike 表达式实现“以搜索开始”?

我们尝试了以下方法,但没有成功:

*as.expregexcompare(
    "^"+regexp.quotemeta("search_term"),
    as.expregexflagicase,
    as.explistbin("listfield"),
)

在 aerospike-logs 中,出现以下警告:

warning (exp): (exp.c:1469) build_cmp_regex - error 4 invalid arg type 4 (list) != 3 (str)
warning (query): (query.c:1485) basic query job failed msg field processing

有关更多背景信息,这是数据库设置:

我们有以下模型存储在 aerospike 内:

type mymodel struct {
    listfield []string
    [some-other-fields]
}

以及以下二级索引: 索引名称:idx_myset_listfield / 命名空间:myns / 设置:myset / bin:listfield / bin:字符串 / 索引:列表 / 状态:rw

如果我通过 aql 读取示例记录:

aql> select PK,ListField from myns.MYSET where PK = 12345
+--------------------+-------------------------------------------------------------------+
| PK | ListField |
+--------------------+-------------------------------------------------------------------+
| 12345 | LIST('["myid:1234", "testid2", "some-other-value", "more-values"]') |
+--------------------+-------------------------------------------------------------------+

正确答案


表达式不支持列表或映射的迭代。列表和映射 API 通常提供使用旧 predexp 提供的迭代来解决用例的功能。这是我遇到的第一个以列表/地图 API 无法复制的方式使用迭代的用例。

从 6.3 开始,复制此行为的唯一方法可能是使用 Stream UDF.

终于介绍完啦!小伙伴们,这篇关于《如何使用 Aerospike 表达式通过正则表达式搜索列表项》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>