elasticsearch - Elasticsearch 管道无法访问@myfield
问题描述
在创建文档时,我想访问以“@”开头的字段。
文档将以这种方式添加:
POST http://localhost:9200/myindex/_doc?pipeline=test_pipeline
{
"name":"Joe",
"@myfield":"field value"
}
甚至不能像这样添加管道,它会引发编译错误(使用没有'@'的字段效果很好)
{
"description": "describe pipeline",
"processors": [
{
"script": {
"ignore_failure": false,
"lang": "painless",
"source": "ctx._id= ctx.@myfield"
}
}
]
}
尝试此处描述的解决方案https://discuss.elastic.co/t/painless-how-to-access-timestamp-field-in-script/130263
{
"description": "describe pipeline",
"processors": [
{
"script": {
"ignore_failure": false,
"lang": "painless",
"source": "ctx._id= ctx._source['@myfield']"
}
}
]
}
这会成功创建管道,但是以上述方式添加文档不会成功,会引发 NPE:
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"ctx._id= ctx._source['@myfield']",
" ^---- HERE"
],
"script": "ctx._id= ctx._source['@myfield']",
"lang": "painless",
"position": {
"offset": 12,
"start": 0,
"end": 34
},
"caused_by": {
"type": "null_pointer_exception",
"reason": "Cannot invoke \"Object.getClass()\" because \"callArgs[0]\" is null"
}
解决方案
这有效:"source": "ctx._id= ctx['@myfield']"
ctx._source 只能在使用更新、按查询更新或重新索引 API
源时访问:
https ://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-fields.html
推荐阅读
- c# - 当我无权访问 HttpContext 时,如何填充我的审核日志 UserId 字段?
- python - 如何在自定义 Django Allauth 表单中设置密码字段的 help_text?
- terraform - terraform cloud - 已计划但未显示可应用的选项
- linker - 在调试部分周围添加符号会导致二进制文件的大小增加三倍
- php - 如何解决不存在的目标类?
- android - 弹出回栈会引发“已添加片段”异常
- siddhi - 是否可以在 WSO2SP 中生成和使用动态 URL?
- spring - 从外部文件加载 Spring Boot 应用程序属性
- c# - DataTable和Sql server之间的数据传输
- sql-server - 漏洞是 MSSQL 语句