目录

本系列正在更新,点击下方查看

理解字段含义

根据第一步我们使用python脚本扫描出的文本结构,我们可以得到每行数据的结构如下

{
'titleId': 'tt0012941',
'ordering': '3',
'title': 'Billy Jim',
'region': 'US',
'language': '\\N',
'types': '\\N',
'attributes': '\\N',
'isOriginalTitle': '0'
}

根据官网给出的描述,可以按如下理解对应字段

- titleId 唯一标识
- ordering 排序字段,唯一的
- title 标题
- region 区域
- language 语言
- types 类型,可能出现多个但不仅有 "alternative", "dvd", "festival", "tv", "video", "working", "original", "imdbDisplay"
- attributes 属性
- isOriginalTitle 是否为原始标题

根据业务设计字段映射

由于我们是自主学习,并没有实际的业务去支撑,所以我们根据字段的实际含义来设计对应的业务需求,并采用对应的类型映射。

titleId & ordering

这里要注意的是,实际上这两个标识并不是唯一的。如果需要唯一,那就要把这两个组合在一起。

在根据实际业务开发过程中,一定要多看几眼,避免因为语言和文化差异导致的对需求的理解偏差。

【Elasticsearch】使用IMDB学习ES(3) 设计映射结构_elasticsearch

title & region & language

这三个属于字符串类型的业务字段,要注意的是数据会以​​\N​​作为没有数据的填充,这个不需要导入ES数据中。

types & attributes

这两个业务字段属于数组类型,业务上可能需要多选查询。

isOriginalTitle

布尔类型的值,业务上需要勾选是否。

确定ES映射

业务分析

根据上面的业务分析,我们可以得出如下结果


  • titleId,模糊搜索
  • ordering,精准匹配
  • title,模糊搜索
  • region,精准匹配
  • language,精准匹配
  • types,数组内元素的精准匹配
  • attributes,数组内元素的精准匹配
  • isOriginalTitle,精准匹配

同时,由于这些字段内并没有完全的唯一标识,我们把titleId和ordering进行拼接,得到一个系统内的唯一标识,并命名为id

确认映射


  • id text
  • titleId text
  • ordering integer
  • title text
  • region keyword
  • language keyword
  • types array
  • attributes array
  • isOriginalTitle boolean

其中array内部存放string类型

声明映射

根据上一步分析,映射声明脚本如下

PUT imdb
{
"mappings": {
"properties": {
"id": { "type": "text" },
"titleId": { "type": "text" },
"ordering": { "type": "integer" },
"title": { "type": "text" },
"region": { "type": "keyword" },
"language": { "type": "keyword" },
"types": { "type": "keyword" },
"attributes": { "type": "keyword" },
"isOriginalTitle": { "type": "boolean" }
}
}
}

创建成功

{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "imdb"
}

在索引管理中可以查看到刚才创建的映射

【Elasticsearch】使用IMDB学习ES(3) 设计映射结构_elasticsearch_02

总结


  • 根据实际业务设计映射
  • 业务上的坑不少需要花时间理解透彻

参考资料