mustache 条件块 Elasticsearch 中的逗号问题

问题描述 投票:0回答:1

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

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

elasticsearch mustache elasticsearch-template
1个回答
0
投票

解决此问题的一种常见方法是让模板支持一组查询并指定哪个是

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

© www.soinside.com 2019 - 2024. All rights reserved.