ES中使用nested类型的内嵌对象
在 Elasticsearch 中处理关联关系
关系型数据库,一般会考虑 Normalize 数据;在 Elasticsearch,往往考虑 Denormalize 数据
Denormalize 的好处:读的速度变快、无需表连接、无需行锁
Elasticsearch 并不擅长处理关联关系,我们一般采用以下四种方法处理关联
对象类型
嵌套对象(Nested Object)
父子关联关系(Parent 、Child)
应用端关联
案例 1:
对象类型
在每个博客的问下中都保留作者的信息
如果作者信息发生变化,需要修改相关的博客文档
PUT /blog
{
"mappings": {
"properties": {
"content": {
"type": "text"
},
"time": {
"type": "date"
},
"user": {
"properties": {
"city": {
"type": "text"
},
"userid": {
"type": "long"
},
"username": {
"type": "keyword"
}
}
}
}
}
}
# 插入一条 Blog 信息
PUT blog/_doc/1
{
"content":"I like Elasticsearch",
"time":"2019-01-01T00:00:00",
"user":{
"userid":1,
"username":"Jack",
"city":"Shanghai"
}
}
通过一条查询语句即可获取到博客和作者信息
# 查询 Blog 信息
POST blog/_search
{
"query": {
"bool": {
"must": [
{"match": {"content": "Elasticsearch"}},
{"match": {"user.username": "Jack"}}
]
}
}
}
相关文章