gpt4 book ai didi

regex - Elasticsearch中无法识别的字符转义

转载 作者:行者123 更新时间:2023-12-02 22:59:11 26 4
gpt4 key购买 nike

试图在elasticsearch中使用以下查询进行正则表达式搜索:

{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"regexp": {
"displayName" : "(^a\w+| a(\w+))"
}
}
]
}
}
}
}
}

这个正则表达式可以在 https://regex101.com/中正常工作,但是上面的查询给出了:
nested: QueryParsingException[[bm_md_acct_9993342_v1] Failed to parse]; nested: JsonParseException[Unrecognized character escape 'w' (code 119)\n at [Source: UNKNOWN; line: 10, column: 37]]; }

我尝试以不同的方式进行转义,但没有成功。如何正确设置转义序列?

尝试过:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"regexp": {
"displayName" : "(^J\\w+| J(\\w+))"
}
}
]
}
}
}
}
}

即使存在displayName“Jason Cremer”的记录,也会给出空结果。

最佳答案

elasticsearch中的正则表达式查询不是完全灵活的。
例如,\w匹配常规正则表达式约定中的任何单词字符,但是在elasticsearch中,由于\w是elasticsearch中的保留字符,因此无法表示\

为了使\w在elasticsearch中有效,我们必须使用\进行转义,这会将您的正则表达式转换为\\\w。现在,此\\\w更改了正则表达式的含义。

它将匹配"\" followed by "w" rather than matching word character

我的建议是将您的正则表达式中的\ w替换为[a-zA-Z0-9_]。这会起作用。
同样,您不能为单个字符使用^。删除您的正则表达式中,您的查询将是

 { "query": {   "constant_score": {
"filter": {
"bool": {
"must": [
{
"regexp": {
"displayName" : "(J[a-zA-Z0-9_]+| J([a-zA-Z0-9_]+))"
}
}
]
}
} } } }

关于regex - Elasticsearch中无法识别的字符转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40588632/

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