我有一个带有嵌套字段“roles”的elasticsearch索引:
"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 Jmeter 板。
1条答案
按热度按时间polhcujo1#
似乎没有办法将
nested
字段与runtime
字段一起使用。我可以按照here的建议定义一个脚本字段,从而得到想要的结果。
在
Index Pattern > [index pattern name] > Scripted fields tab > Add scripted field
(Kibana版本7.17。对于更高版本,请将Index Patterns
替换为Data Views
)中添加以下脚本。对于
roles
:对于
responsibilities
:(Note:脚本字段可能导致性能问题,因此已弃用)