将一个列表传递给Elasticsearch查询模板

问题描述:

我试图将参数列表传递给Elasticsearch中的搜索查询(按条件筛选)。它的工作原理时,它不是一个模板,只需在查询:将一个列表传递给Elasticsearch查询模板

"terms": { 
     "speaker": ["HAMLET", "KING HENRY IV"] 
     } 

我已经把它放入模板是这样的:

"terms": { 
      "{{filter1}}": "{{filter1_val}}"} 
     } 

然后调用它像这样:

GET shakespeare/_search/template 
{ 
    "id":"template", 
    "params": { 
    "filter1": "speaker", 
    "filter_value1": ["HAMLET", "KING HENRY IV"] 
    } 
} 

而且我得到以下错误:

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "parsing_exception", 
     "reason": "[terms] query does not support [speaker]", 
     "line": 1, 
     "col": 98 
     } 
    ], 
    "type": "parsing_exception", 
    "reason": "[terms] query does not support [speaker]", 
    "line": 1, 
    "col": 98 
    }, 
    "status": 400 
} 

我已经尝试向模板本身添加括号,例如“{{filter1}}”:[{{filter1_val}}]并添加引号并删除它们,并以“[\”HAMLET \“,\” “KING HENRY IV \”]“,但没有一个工作。

我在做什么错?什么是正确的方法来做到这一点?欢迎任何建议。

谢谢!

实测溶液这里:

https://www.elastic.co/guide/en/elasticsearch/reference/1.6/search-template.html#_passing_an_array_of_strings

传递字符串

GET /_search/template 
{ 
    "template": { 
    "query": { 
     "terms": { 
     "status": [ 
      "{{#status}}", 
      "{{.}}", 
      "{{/status}}" 
     ] 
     } 
    } 
    }, 
    "params": { 
    "status": [ "pending", "published" ] 
    } 
} 

的阵列,其被渲染为:

{ 
"query": { 
    "terms": { 
    "status": [ "pending", "published" ] 
    } 
}