【elasticsearch进阶】search template和alias

什么是search template

顾名思义,查询模版,就是提前设定好查询的DSL,再次查询时,只需要指定对应的模版,然后传入相应的参数就好。一是可以每次不用构建复杂的DSL,二是可以供开发直接使用查询DSL模版,减少学习和对接成本。

有如下两种方法

一、创建脚本_script/template,然后使用此模版

#创建脚本
POST _scripts/mytemplate
{
  "script":{
    "lang": "mustache",
    "source": {
        "query": {
            "term": {
                "{{key}}":"{{query_string}}"
            }
        }
    }
  }
}

#对某个索引使用脚本
GET movies/_search/template
{
  "id":"mytemplate",
  "params": {
    "key":"title",
    "query_string":"love"
  }
}

二、在es安装目录config/scripts文件夹下,添加.mustache文件

{
    "query":{
      "match": {
             "{{match_field}}":"{{match_value}}"
        }
      },
      "post_filter":{
        {{#isCondition}}
            "range":{
                "{{range_field}}":{
                   {{#start}}
                      "gte":{{start}}
                       {{#end}},{{/end}}
                    {{/start}}
                   
                   {{#end}}
                       "lte":{{end}}
                   {{/end}}
                  }
                }
        
        {{/isCondition}}
      
      }
  }
}

查询语句:

GET book/book/_search/template
{
  "file":"match_condition",
  "params": {
    "match_field":"bookAuthor",
    "match_value":"陈寅恪",
    "isCondition":true,
    "range_field":"bookPrice",
    "start":10,
    "end": 10
  }
}

什么是alias

alias是别名对意思,对一个索引建立别名

  • 可以帮助运维实现零停机情况下重建索引
  • 可以过滤一些索引的数据
  • 可以指向多个索引(只能查,不能修改新增等操作)
PUT /my_index_name/_alias/alias_name

如何实现零停机呢更换索引呢

  • 首先保证要重建的索引是有别名的,并且其他业务方是使用这个alias来获取数据的
  • 新建一个索引,将老索引的数据添加到新增的索引上
  • 把老索引的别名删除,再给新增的索引添加老索引的别名
POST /_aliases
{
    "actions": [
        { "remove": { "index": "my_index_name_v1", "alias": "alias_name" }},
        { "add":    { "index": "my_index__name_v2", "alias": "alias_name" }}
    ]
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容