一、题目
在集群中输入以下指令:
PUT phones/_doc/1
{
"brand":"Samsumg",
"model":"Galaxy S9+",
"features":[
{"type":"os", "value":"Android"},
{"type":"storage", "value":"64"},
{"type":"camera_resolution", "value":"12"}
]
}
PUT phones/_doc/2
{
"brand":"Apple",
"model":"iPhone XR",
"features":[
{"type":"os", "value":"Apple 10s"},
{"type":"storage", "value":"128"},
{"type":"camera_resolution", "value":"12"}
]
}
GET /phones/_search
{
"query": {
"bool": {
"must": [
{"match": {
"features.type": "storage"
}},
{"match": {
"features.value": "12"
}}
]
}
}
}
注意查询语句的查询结果,尽管它们的 type
字段值为 storage 时,value
字段的值都不等于 12,不知道为什么,特征数组的类型和值对象之间的关系丢失了。
现要求新建一个索引 task10
,能够保持特征数组中对象和值之间的关系。并将上述两个文档写入到 task10
中,然后编写一个查询 type
字段值为 storage 时,value
字段的值等于 12 的 查询。此时上面两个文档都应该不在你的查询范围内。
1.1 考点
- Mapping 中的 Nested
- Query DSL 中的 Nested
1.2 答案
# 新建索引结果,设定正确的字段类型
PUT task10
{
"mappings": {
"properties": {
"brand": {
"type": "keyword"
},
"model": {
"type": "keyword"
},
"features": {
"type": "nested",
"properties": {
"type": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
}
}
# 向新索引灌入数据
POST _reindex
{
"source": {
"index": "phones"
},
"dest": {
"index": "task10"
}
}
# 检查验证结果
GET task10/_search
{
"query": {
"nested": {
"path": "features",
"query": {
"bool": {
"must": [
{
"match": {
"features.type": "storage"
}
},
{
"match": {
"features.value": "12"
}
}
]
}
}
}
}
}
GET task10/_search
{
"query": {
"nested": {
"path": "features",
"query": {
"bool": {
"must": [
{
"match": {
"features.type": "storage"
}
},
{
"match": {
"features.value": "128"
}
}
]
}
}
}
}
}
二、题目
现有以下文档,请编写一个名为 test_data_stream
数据流满足以下请求:
{
"@timestamp": "2099-03-08T11:04:05.000Z",
"message": "test"
}
- 数据流索引的主分片数为 3,副本分片数为 1
- 将上述文档填充到数据流中去
2.1 考点
- 数据流的建立
- 数据流数据的写入
2.2 答案
# 建立索引模板
PUT _index_template/my_template
{
"index_patterns": [
"test_*"
],
"data_stream": {},
"template": {
"settings": {
"number_of_replicas": 1,
"number_of_shards": 3
}
},
"priority": 500
}
# 创建数据流
PUT _data_stream/test_data_stream
# 向数据流写入数据
POST test_data_stream/_doc
{
"@timestamp": "2099-03-08T11:04:05.000Z",
"message": "test"
}
# 获取数据流中的文档
GET test_data_stream/_search