【发布时间】:2023-01-12 12:54:09
【问题描述】:
我有一个带有嵌套字段“角色”的弹性搜索索引:
"roles": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower"
}
}
},
"responsibilities": {
"properties": {
"name": {
"type": "text",
"fields": {
"raw": {
"type": "text",
"analyzer": "keylower"
}
}
}
}
}
}
}
这些字段中的值是数组,例如:
"roles": [
{
"name": "System Analyst",
"responsibilities": [
{
"name": "Software Development"
},
{
"name": "Software Testing"
}
]
},
{
"name": "Data Analyst",
"responsibilities": [
{
"name": "Data analysis"
},
{
"name": "Reporting"
}
]
}
]
我想分别在这些字段上构建 Kibana 可视化。由于它是一个嵌套字段并且 kibana 还不支持它(?),所以我想到为每个字段创建运行时字段。
这是我用于角色的查询:
PUT employee/_mappings
{
"runtime": {
"empRoles": {
"type": "keyword",
"script": """if (doc["roles.name.raw"].size()!=0 ) {
String[] empRoles;
for(int i=0; i < doc["roles.name.raw"].size(); i++) {
empRoles[i] = doc["roles.name.raw"].value ;
}
emit(empRoles);}"""
}
}
}
但我收到以下错误:
"caused_by" : {
"type" : "class_cast_exception",
"reason" : "Cannot cast from [java.lang.String[]] to [java.lang.String]."
}
我怎样才能让它发挥作用?最终,我想在“角色”和“职责”字段上构建一个 kibana 仪表板。
【问题讨论】:
标签: elasticsearch kibana elasticsearch-painless nested-fields