У меня есть следующий шаблон, который я пытаюсь использовать на Elasticsearch 6.6.2:
{
{{#hasSpecialIDFilters}}
"query": {
"bool": {
"must": [
{
"terms": {
"mySpecialID": [{{#join}}mySpecialIDFilters{{/join}}]
}
}
]
}
},
{{/hasSpecialIDFilters}}
"sort": [
{
"mySortingField": "desc"
}
]
}
У меня есть приложение Java, которое преобразует этот шаблон в тело запроса RESTful и отправляет его в мой кластер. Я должен отметить, что у меня есть другие шаблоны, которые проходят через эту систему без проблем. Результирующий запрос:
{
"script": {
"lang": "mustache",
"source":"{{{#hasSpecialIDFilters}}\"query\":{\"bool\":{\"must\":[{\"terms\":{\"mySpecialID\":[{{#join}}mySpecialIDFilters{{/join}}]}}]}},{{/hasSpecialIDFilters}}\"sort\":[{\"mySortingField\":\"desc\"}]}" }
}
Когда я пытаюсь сделать шаблон:
POST _render/template/my-special-template
Я получаю следующую ошибку:
{
"error": {
"root_cause": [
{
"type": "general_script_exception",
"reason": "Failed to compile stored script [my-special-template] using lang [mustache]"
}
],
"type": "general_script_exception",
"reason": "Failed to compile stored script [my-special-template] using lang [mustache]",
"caused_by": {
"type": "mustache_exception",
"reason": "Improperly closed variable in query-template:1"
}
},
"status": 500
}
Если я удаляю строки {{#hasSpecialIDFilters}}
и {{/hasSpecialIDFilters}}
, шаблон будет отображаться нормально, но я использую это значение в качестве логического значения, чтобы указать, должен ли я включать в себя запрос массива терминов. Я не уверен, почему это проблема, поскольку все выглядит синтаксически правильно.
Обходной путь для меня заключается в том, чтобы просто поддерживать два отдельных шаблона, один из которых требует массива mySpecialIDFilters
, а другой без него, при этом мой вызывающий код определяет, какой из них вызывать, но я бы предпочел, чтобы он был внутри одного шаблона.
У кого-нибудь есть идеи, в чем может быть проблема?
Заранее спасибо!