Mustache条件块ElasticSearch中的逗号问题

ruyhziif  于 7个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(44)

我正在用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}}
                    ]
                    
                }},

字符串
但是问题是我希望能够为这个查询的一个、零个或多个参数设置值,而逗号把事情搞砸了。我不知道如何才能正确地做到这一点。在这个配置中,如果你不设置最后一个字段,它就不起作用,我不知道如何处理。

bvn4nwqk

bvn4nwqk1#

解决这个问题的一个常见方法是让你的模板支持一个查询数组,并指定哪一个是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": {
    "queries": [
      {
        "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

相关问题