1. Search Template
在开发初期,虽然可以明确查询参数,但是往往还不能最终定义查询的 DSL 的具体结构。可以通过定义一个查询模板达到程序解耦的效果。
假设目前存在如下索引 tmdb:
1 2 3 4 5
| PUT tmdb/_doc/1 { "title": "Apple", "overview": "a basketball" }
|
我们可以通过如下 scripts 脚本定义查询模板,其中
表示输入的查询文本所表示的变量 q,POST _scripts/tmdb
中的 tmdb 自行定义,其表示脚本 ID:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| POST _scripts/tmdb { "script": { "lang": "mustache", "source": { "_source": [ "title","overview" ], "size": 20, "query": { "multi_match": { "query": "{{q}}", "fields": ["title","overview"] } } } } }
|
定义好查询模板之后,我们便可以通过如下 DSL 查询:
1 2 3 4 5 6 7
| POST tmdb/_search/template { "id":"tmdb", "params": { "q": "basketball with cartoon aliens" } }
|
2. Index Alias
Index Alias 支持对已存在的索引关联一个别名,后续可以通过别名查询该索引的数据,我们先使用索引 movies-2019 存入如下两条数据:
1 2 3 4 5 6 7 8 9 10 11
| PUT movies-2019/_doc/1 { "name":"the matrix", "rating":5 }
PUT movies-2019/_doc/2 { "name":"Speed", "rating":3 }
|
接着为索引使用一个别名 movies-latest,后续即可使用别名进行查询 movies-latest:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| POST _aliases { "actions": [ { "add": { "index": "movies-2019", "alias": "movies-latest" } } ] }
// 使用别名查询 POST movies-latest/_search { "query": { "match_all": {} } }
|
另外,我们也可以在为索引关联一个别名时设置过滤条件,例如对 rating 字段增加一个范围查询条件,rating 的值需要大于等于 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| POST _aliases { "actions": [ { "add": { "index": "movies-2019", "alias": "movies-lastest-highrate", "filter": { "range": { "rating": { "gte": 4 } } } } } ] }
|