写在前面
本文看下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条数据了: