gpt4 book ai didi

Elasticsearch 搜索模板在尝试渲染时导致 "Improperly closed variable"

转载 作者:行者123 更新时间:2023-12-03 01:31:56 28 4
gpt4 key购买 nike

我尝试在 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}}行,模板呈现良好,但我使用该值作为 bool 值来指示是否应该在其中包含术语数组 bool 查询。我不确定为什么这是一个问题,因为一切看起来在语法上都是正确的。

我的解决方法是只维护两个单独的模板,一个需要 mySpecialIDFilters数组,一个没有它,我的调用代码决定调用哪一个,但我宁愿将它放在一个模板中。

有没有人有任何想法可能是什么问题?

提前致谢!

最佳答案

而不是 join功能,你需要使用toJson功能,它将工作:

{
{{#hasSpecialIDFilters}}
"query": {
"bool": {
"must": [
{
"terms": {
"mySpecialID": {{#toJson}}mySpecialIDFilters{{/toJson}}
}
}
]
}
},
{{/hasSpecialIDFilters}}
"sort": [
{
"mySortingField": "desc"
}
]
}

然后你可以像这样调用你的模板,它会起作用:
POST _render/template/my-special-template
{
"params": {
"hasSpecialIDFilters": true,
"mySpecialIDFilters": [1,2]
}
}

关于Elasticsearch 搜索模板在尝试渲染时导致 "Improperly closed variable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55385735/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com