一、题目
在集上有一个索引 task2
,brand
字段 match
搜索 Yoo-Hoo 有 3 个文档返回,match
搜索 YooHoo 有 10 个文档返回,请重建 索引 task2
到 task2_new
索引上,并满足以下要求:
- 集群的
brand
字段包含关键字 Yoo-Hoo 和 YooHoo ,不管搜索 Yoo-Hoo 还是 YooHoo,它的结果应该一样,都是3个。 task2_new
和task2
的doc
和mapping
一样,mapping
要拷贝,不能直接reindex
1.1 考点
1.2 答案
rust
# 新建索引,自定义分词器
PUT task2_new
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer": {
"char_filter": [
"map"
],
"tokenizer": "standard",
"filter": []
}
},
"char_filter": {
"map": {
"type": "mapping",
"mappings": [
"- => "
]
}
}
}
},
"mappings": {
"properties": {
"brand":{
"type": "text",
"analyzer": "custom_analyzer"
}
}
}
}
# 将 task2 的数据写入到 task2_new
POST _reindex
{
"source": {
"index": "task2"
},
"dest": {
"index": "task2_new"
}
}
# 查询验证
GET task2_new/_search
{
"query": {
"match": {
"brand": "Yoo-Hoo"
}
}
}
二、题目
对索引 task9
编写一个查询模板,并满足以下要求:
- 使用 a_01 参数查询
a
字段 - 使用 start_date 和 end_date 参数范围查询
timestamp
字段 - 如果没有提供 end_date 参数,那么结束时间默认是现在
- 查询结果中
b
字段必须是 active,
利用查询模板,编写查询语句,查询 2018年6月1日 到 现在 的数据,a
字段包含关键字 aaa。
rust
# 创建索引
PUT task9
{
"mappings": {
"properties": {
"a":{
"type": "text"
},
"b":{
"type": "keyword"
},
"timestamp":{
"type": "date"
}
}
}
}
# 写入数据
POST /task9/_bulk
{"index": {}}
{"a":"aaa AAA", "b":"active", "timestamp":"2021-11-11T11:21:21.000Z"}
{"index": {}}
{"a":"aaa AAA", "b":"active", "timestamp":"2022-11-11T11:21:21.000Z"}
{"index": {}}
{"a":"AAA", "b":"b", "timestamp":"2023-11-11T11:21:21.000Z"}
2.1 考点
2.2 答案
rust
# 创建模板
PUT _scripts/search-template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"gte": "{{start_date}}",
"lte": "{{end_date}}{{^end_date}}now{{/end_date}}"
}
}
},
{
"match": {
"a": "{{a_01}}"
}
},
{
"term": {
"b": {
"value": "active"
}
}
}
]
}
}
},
"params": {
"end_date": "now"
}
}
}
# 预览模板
POST _render/template
{
"id": "search-template",
"params": {
"a_01": "hello world",
"start_date": "2022-11-11T11:21:21.000Z"
}
}
# 使用模板搜索
GET task9/_search/template
{
"id": "search-template",
"params": {
"a_01": "aaa",
"start_date": "2022-11-11T11:21:21.000Z"
}
}