ElasticSearch的 search template搜索模板

出自 图灵学院 ElasticSearch课程, 我自己学完了,整理了一下,然后给老师说的话,记录了一下,发了个博客

概述

搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,就直接调用模板,给传入一些参数就可以了

search template就类似MySQL的存储过程和存储函数

MySQL的存储过程和存储函数就直接放到MySQL里面的,执行效率比较高,比较复杂的逻辑可以直接封装好,然后程序员直接快速的调用就可以了.

search template搜索模板在公司不一定能用得到.

但是一般高阶专门搞ElasticSearch的开发人员可能就会用到了.

template入门案例

简单定义参数并传递

source和params 是关键字,不能随便改的.

GET /cars/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{kw}}"
      }
    },
    "size": "{{size}}"
  },
  "params": {
    "kw": "大众",
    "size": 2
  }
}

toJson方式传递参数

GET cars/_search/template
{
  "source": """{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}""",
  "params": {
    "parameter": {
      "remark": "大众"
    }
  }
}

#toJson不要随便改,是一个关键字

join方式传递参数

GET cars/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
      }
    }
  },
  "params": {
    "kw": [
      "大众",
      "标致"
    ]
  }
}

上面的dsl的意思是
remark:“大众 标致”

默认值定义:

下面的 {{^end}}200000{{/end}}" 语法就是定义了一个默认值


GET cars/_search/template
{
  "source": {
    "query": {
      "range": {
        "price": {
          "gte": "{{start}}",
          "lte": "{{end}}{{^end}}200000{{/end}}"
        }
      }
    }
  },
  "params": {
    "start": 100000,
    "end" : 200000
  }
}
GET cars/_search/template
{
  "source": {
    "query": {
      "range": {
        "price": {
          "gte": "{{start}}",
          "lte": "{{end}}{{^end}}200000{{/end}}"
        }
      }
    }
  },
  "params": {
    "start": 100000
  }
}

“lte”: “{{end}}{{^end}}200000{{/end}}” 中{{^end}}200000{{/end}}的意思是声明默认值

上面两个dsl语句效果是一样的.

记录template实现重复调用

可以使用Mustache语言作为搜索请求的预处理,它提供了模板,然后通过键值对来替换模板中的变量。把脚本存储在本地磁盘中,默认的位置为:elasticsearch\config\scripts,通过引用脚本名称进行使用

1 保存template到ES

test 是模板名字

POST _scripts/test
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "remark": "{{kw}}"
        }
      }
    }
  }
}

2 调用template执行搜索

“id”: “test”, 意思是调用名字为test的模板
params就是调用模板的值

GET cars/_search/template
{
  "id": "test",
  "params": {
    "kw": "大众"
  }
}

3 查询已定义的template

GET _scripts/test

结果:

{
  "_id" : "test",
  "found" : true,
  "script" : {
    "lang" : "mustache",
    "source" : """{"query":{"match":{"remark":"{{kw}}"}}}""",
    "options" : {
      "content_type" : "application/json; charset=UTF-8"
    }
  }
}

4 删除已定义的template

DELETE _scripts/test
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值