我正在使用 bool 查询为 Elasticsearch 构建一个带有 Mustache 的搜索模板,但我的条件块有问题
我已经编写了模板的这一部分:
\"must\":[
{{#query_string}}
{\"multi_match\":{
\"query\":\"{{query_string}}\",
\"fields\": [
\"cdm_cours_2_title.text^5\",
\"cdm_cours_4_resume.text\",
\"cdm_cours_5_description.text\"
]
}},{{/query_string}}
{{#title}}
{\"match\":{\"cdm_cours_2_title.text\":\"{{title}}\"}},
{{/title}}
{{#resume}}
{\"match\":{\"cdm_cours_4_resume.text\":\"{{resume}}\"}},
{{/resume}}
{{#description}}
{\"match\":{\"cdm_cours_5_description.text\":\"{{description}}\"}}
{{/description}}
]
}},
但问题是我希望能够为该查询的一个参数、无参数或多个参数设置值,而逗号把事情弄乱了。我不知道如何才能正确地做到这一点。 在此配置中,如果您不设置最后一个字段,它就不起作用,我不知道如何处理它。
解决此问题的一种常见方法是让模板支持一组查询并指定哪个是
last
。
这里模板将循环遍历
queries
的数组,仅当查询是数组中的最后一个时才会添加逗号:
{{#queries}}
{{#query_string}}
{\"multi_match\":{
\"query\":\"{{value}}\",
\"fields\": [
\"cdm_cours_2_title.text^5\",
\"cdm_cours_4_resume.text\",
\"cdm_cours_5_description.text\"
]
}}
{{^last}},{{/last}}
{{/query_string}}
{{#title}}
{\"match\":{\"cdm_cours_2_title.text\":\"{{value}}\"}}
{{^last}},{{/last}}
{{/title}}
{{#resume}}
{\"match\":{\"cdm_cours_4_resume.text\":\"{{value}}\"}}
{{^last}},{{/last}}
{{/resume}}
{{#description}}
{\"match\":{\"cdm_cours_5_description.text\":\"{{value}}\"}}
{{^last}},{{/last}}
{{/description}}
{{/queries}}
然后您需要像这样调用查询:
POST index/_search/template
{
"id": "my-query",
"params": {
"query": [
{
"query_string": {
"value": "my-query-string"
}
},
{
"title": {
"value": "my-title"
}
},
{
"resume": {
"value": "my-resume"
}
},
{
"description": {
"value": "my-description",
"last": true <--- the last condition has last = true
}
}
]
}
}
您可以按任意顺序指定任意数量的条件,但最后一个条件必须指定
last: true
。