赞
踩
本文基于Elasticsearch7.x
什么是范式? 范式就是数据建模的规则.
关系数据库的三大范式简化了写操作, 但读操作性能不高(join操作非常耗费性能), 并且扩展性很差. 而反范式化设计在文档中保存冗余的数据, 无需处理join操作, 数据读取性能很好, 但反范式化设计不适合数据频繁修改的场景.
Elasticsearch使用的是非关系型的数据存储引擎, 即反范式化设计, 那Elasticsearch如何处理存在关联关系的数据呢? 有三种方法, 即三种数据类型.
对象类型(Object)
使用Object数据类型来将电影和演员信息存储到一个doc里.
(1) 定义Mapping
PUT /my_movies { "mappings": { "properties": { "title": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "actors": { "properties": { "first_name": { "type": "keyword" }, "last_name": { "type": "keyword" } } } } } }
(2) 添加数据
PUT /my_movies/_doc/1
{
"title": "Speed",
"actors": [
{
"first_name": "Keanu",
"last_name": "Reeves"
},
{
"first_name": "Dennis",
"last_name": "Hopper"
}
]
}
(3) 搜索
GET /my_movies/_search { "query": { "bool": { "must": [ { "match": { "actors.first_name": "Keanu" } }, { "match": { "actors.last_name": "Hopper" } } ] } } }
结果:
"hits" : [
{
"_index" : "my_movies",
"_type" : "_doc",
"_id" : "1",
"_scor
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。