在ElasticSearch模板中,我想:
"aggs": {
"att_characteristic": {
"filters": {
"filters": {
{{#agg-att}}
"{{code}}" : {"term": { "characteristic.code": "{{code}}"}}{{^last}}, {{/last}}
{{/agg-att}}
}
},
"aggs": {
"agg_by_value": {
"terms": {
"field": "characteristic.value",
"size": 10000
},
"aggs": {
"top_reverse_nested": {
"reverse_nested": {}
}
}
}
}
}
}
但我得到以下错误:
"reason" : "Improperly closed variable in query-template:1 @[query-template:1]"
它在以下位置出错:
{{#agg-att}}
"{{code}}" : {"term": { "characteristic.code": "{{code}}"}}{{^last}}, {{/last}}
{{/agg-att}}
我们可以像在另一种语言中一样使用Mustache语言循环ElasticSearch模板吗?
PS:它被称为与
GET index-name-dev/_search/template
{
"id": "search-template-test",
"params": {
"agg-att":[{"code":"Color"},
{"code":"Shape"},
{"code":"Size"}]
}
}
谢谢!
更新:下面是一个完整的例子
Map如下:
PUT tly-idx_test1
{
"mappings": {
"properties": {
"fieldA": {
"type": "keyword"
},
"fieldArrayA": {
"type": "keyword"
},
"fieldArrayB": {
"type": "nested",
"properties": {
"color": {
"type": "keyword",
"fields": {
"text": {
"type": "text",
"analyzer": "standard"
}
}
},
"size": {
"type": "keyword",
"fields": {
"text": {
"type": "text",
"analyzer": "standard"
}
}
},
"shape": {
"type": "keyword",
"fields": {
"text": {
"type": "text",
"analyzer": "standard"
}
}
},
"value": {
"type": "keyword",
"fields": {
"text": {
"type": "text",
"analyzer": "standard"
}
}
},
"obligatoire": {
"type": "boolean"
}
}
},
"fieldB": {
"type": "text"
},
"fieldC": {
"type": "text"
},
"fieldD": {
"type": "text"
},
"fieldE": {
"type": "boolean"
}
}
}
}
下面是一些数据放入测试索引
POST tly-idx_test1/_doc
{
"fieldA": "M",
"fieldB": "SHOWER PACK",
"fieldC": "false",
"fieldD": "01",
"fieldE": "true",
"fieldArrayA": [
"val1",
"val2",
"val3"
],
"fieldArrayB": [
{"color":"red","size":"10cm","shape":"square","obligatoire":true,"value":"15"},
{"color":"blue","size":"100cm","shape":"circle","obligatoire":true ,"value":"25"},
{"color":"green","size":"50cm","shape":"rectangle","obligatoire":true ,"value":"35"},
{"color":"yellow","size":"22cm","shape":"triangle","obligatoire":true ,"value":"45"}
]
}
下面是模板
GET tly-idx_test1/_search
{
"query": {
"match_all": {}
},
"aggregations": {
"agg-attributs": {
"nested": {
"path": "fieldArrayB"
},
"aggs": {
"att_obligatoire": {
"filters": {
"filters": {
{{#agg-att}}
"{{code}}" : {"term": { "fieldArrayB.color": "{{code}}"}}{{^last}}, {{/last}}
{{/agg-att}}
}
},
"aggs": {
"agg_by_value": {
"terms": {
"field": "fieldArrayB.value",
"size": 10000
},
"aggs": {
"top_reverse_nested": {
"reverse_nested": {}
}
}
}
}
}
}
}
}
}
压缩:
PUT _scripts/tly-template-test
{
"script": {
"lang": "mustache",
"source": "{\"query\":{\"match_all\":{}},\"aggregations\":{\"agg-attributs\":{\"nested\":{\"path\":\"fieldArrayB\"},\"aggs\":{\"att_obligatoire\":{\"filters\":{\"filters\":{{{#agg-att}}\"{{code}}\":{\"term\":{\"fieldArrayB.color\":\"{{code}}\"}}{{^last}},{{/last}}{{/agg-att}}}},\"aggs\":{\"agg_by_value\":{\"terms\":{\"field\":\"fieldArrayB.value\",\"size\":10000},\"aggs\":{\"top_reverse_nested\":{\"reverse_nested\":{}}}}}}}}}}"
}
}
最后,下面是模板调用:
GET tly-idx_test1/_search/template
{
"id": "tly-template-test",
"params": {
"agg-att": [{"code": "color"},
{"code": "shape"},
{"code": "size","last": true}
]
}
}
我得到了同样的错误
"reason" : "Improperly closed variable in query-template:1 @[query-template:1]"
为什么循环不工作?
1条答案
按热度按时间8ljdwjyq1#
您几乎已经完成了,只是忘记在最后一个元素中指定
last
更新:
问题是在你的压缩版本中,一些花括号太靠近了,这会妨碍一些mustache syntax rules(两个
{{
和三个{{{
的意思不一样)这里需要加一个空格
还有一个在这里
这就是为什么使用完全格式化的模板总是更好,更易读的原因,就像下面这个: