美文网首页
查询模板

查询模板

作者: caster | 来源:发表于2020-11-16 15:03 被阅读0次

对应72.官放文档路径:Search APIs » Search Template
官方地址如下:
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/search-template.html

Search template允许使用mustache语言预先设置查询请求,在执行查询请求之前使用参数进行填充请求。

1. 存储一个查询模板:

POST _scripts/<templateid>
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "title": "{{query_string}}"
        }
      }
    }
  }
}

2. 查询一个查询模板:

GET _scripts/<templateid>

3. 删除一个查询模板:

DELETE _scripts/<templateid>

4. 使用一个查询模板进行查询:

GET _search/template
{
    "id": "<templateid>", 
    "params": {
        "query_string": "search for these words"
    }
}

5. 填充参数呈现查询模板:

GET _render/template
{
  "source": "{ \"query\": { \"terms\": {{#toJson}}statuses{{/toJson}} }}",
  "params": {
    "statuses": {
      "status": [
        "pending",
        "published"
      ]
    }
  }
}
GET _render/template/<template_name>
{
  "params": {
    "..."
  }
}

使用模板时可以使用explain和profile API

6. 将参数转为json格式:

{{#toJson}}parameter{{/toJson}}含义为将参数parameter:后面的内容替换到当前位置

GET _search/template
{
  "source": "{ \"query\": { \"terms\": {{#toJson}}statuses{{/toJson}} }}",
  "params": {
    "statuses" : {
        "status": [ "pending", "published" ]
    }
  }
}

结果为:

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

7. 拼接为数组:

{{#join}}array{{/join}}可以将数组改为逗号连接的字符串

GET _search/template
{
  "source": {
    "query": {
      "match": {
        "emails": "{{#join}}emails{{/join}}"
      }
    }
  },
  "params": {
    "emails": [ "username@email.com", "lastname@email.com" ]
  }
}

结果为:

{
    "query" : {
        "match" : {
            "emails" : "username@email.com,lastname@email.com"
        }
    }
}

{{#join delimiter='||'}}date.formats{{/join delimiter='||'}也可以自定义分隔符

8. 设定默认值:

{{var}}{{^var}}default{{/var}}:含义为var参数变量默认值为default

9. 设置条件语句(当参数为非必填时使用)

使用条件语句必须将作为字符串传递,不能使用json格式。例:在line字段上运行match查询,还可以选择按行号过滤,start和end为可选填的,参数如下:

{
  "params": {
    "text": "words to search for",
    "line_no": {
      "start": 10,
      "end": 20
    }
  }
}

查询按如下方式构造:

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "line": "{{text}}" 
        }
      },
      "filter": {
        {{#line_no}} 
          "range": {
            "line_no": {
              {{#start}} 
                "gte": "{{start}}" 
                {{#end}},{{/end}} 
              {{/start}}
              {{#end}} 
                "lte": "{{end}}" 
              {{/end}}
            }
          }
        {{/line_no}}
      }
    }
  }
}

因为包含部分标记{{#start }},所以在使用时需要将其转为字符串,转换方式如下:
将上面json格式的query语句使用""包裹,并将内部"进行转义("前添加\)

编码url:

{{#url}}value{{/url}}对字符串进行html编码

GET _render/template
{
    "source" : {
        "query" : {
            "term": {
                "http_access_log": "{{#url}}{{host}}/{{page}}{{/url}}"
            }
        }
    },
    "params": {
        "host": "https://www.elastic.co/",
        "page": "learn"
    }
}

结果如下:

{
  "template_output": {
    "query": {
      "term": {
        "http_access_log": "https%3A%2F%2Fwww.elastic.co%2F%2Flearn"
      }
    }
  }
}

相关文章

  • arango的AQL

    arango实践 插入数据模板 修改数据模板 插入数据 查询数据 复杂查询 多表查询 图查询

  • 我们可以对非查询模板做什么?

    在企业管理系统中通常将模板分为两类:一种是查询模板,用于查询数据所用,另一种是非查询模板,用于录入数据。模板类型 ...

  • 查询模板

    对应72.官放文档路径:Search APIs » Search Template官方地址如下:https://w...

  • 三种一维树状数组

    单点修改+区间查询 最基本的树状数组 树状数组入门 模板(洛谷P3374 【模板】树状数组1) 区间修改+单点查询...

  • 【Access模仿】01 制作客户统计报表

    目的 学习该模板的查询设计,用于自制管理系统人员信息详情查询——查询员工编号,并根据查询生成表,用于窗体文件显示。...

  • Room 🔗 RxJava

    原文地址在Room中使用RxJava进行查询 更少的模板代码,编译时SQL查询检查,除此之外,异步和响应式查询能力...

  • thinkphp5 分页样式处理问题

    1、服务端查询数据使用分页函数,并将查询到的数据赋值给模板变量 $artRes=db('archives')->a...

  • 查询类布局模板

    html mixin css 查询和重置

  • Django 模板语法 OneToOne 外键查询

    主表: 子表: 模板语法通过主表(A)查询子表(B) 假设前端接收到的是主表对象 object_A 模板语法通过子...

  • 87_熟练掌握ES Java API_基于search temp

    87_熟练掌握ES Java API_基于search template实现按品牌分页查询模板 搜索模板的功能,j...

网友评论

      本文标题:查询模板

      本文链接:https://www.haomeiwen.com/subject/zxzbbktx.html