写在前面
本文看下es的search template和index alias。
1:search template
用来定义模板查询语句,运行时只需要将要查询的内容作为参数传进来即可,如下:
接着来测试下,首先来定义数据:
DELETE tmdb/
PUT tmdb/curl -H "Content-Type: application/json" -XPOST "192.168.10.64:9210/tmdb/_bulk" --data-binary @javaio-appendfile1709014272558.json
javaio-appendfile1709014272558.json从这里 下载。
接着定义index template:
POST _scripts/tmdb
{"script": {"lang": "mustache","source": {"_source": ["title","overview"]},"size": 20,"query": {"multi_match": {"query": "{{q}}","fields": ["title","overview"]}}}
}
查询:
POST tmdb/_search/template
{"id": "tmdb","params": {"q": "basketball with cartoon aliens"}
}
2:index alias
用来设置索引别名,查询时使用别名,在运行时可以动态修改别名所对应的真正的索引,这样可以做到不停机的更改查询的索引。考虑这样的场景,某个数据一天创建一个索引,如果是不使用index alias的话,则每天都要更改要查询的索引。
首先来准备数据:
POST day_20200301/_bulk
{"index": {"_id": 1}}
{"f1":"aa", "f2": "bb"}
{"index": {"_id": 2}}
{"f1":"aa", "f2": "bb"}
{"index": {"_id": 3}}
{"f1":"aa", "f2": "bb", "f3": "cc"}
有3条数据,接着定义index alias:
POST _aliases
{"actions": [{"add": {"index": "day_20200301","alias": "day_data"}}]
}
查询:
查出3条数据,假定又过了一天到了20200302,也生成对应的索引:
POST day_20200302/_bulk
{"index": {"_id": 1}}
{"f1":"aa", "f2": "bb"}
只有一条数据,再创建别名:
POST _aliases
{"actions": [{"add": {"index": "day_20200302","alias": "day_data"}}]
}
再基于别名查询:
结果竟然是4条,而不是1条,这是因为一个别名可以指向多个索引,如下图:
当然我们可以通过remove来解除别名和某个索引的绑定,如下解除day_data和day_20200301的绑定:
POST _aliases
{"actions": [{"remove": {"index": "day_20200301","alias": "day_data"}}]
}
在执行GET day_data/_count
查询就是day_20200302
这天生成的1条数据了:
写在后面
参考文章列表
ElasticSearch之找到乔丹的空中大灌篮电影 。
Elasticsearch-Alias别名的2个核心场景 。