很神秘,我之前没有做过Elasticsearch相关的笔记吗?这次主要是对创建索引过程做下记录,也许以后会整理一份ES相关的内容。
首先是之前并没有实际创建索引的经历,这次是第一次,基本上就是照抄模板,配置一下字段的名称和类型就完事了,有关数据同步的内容,自己并不是很清楚,因为这部分工作交给其他人做了,我做的内容主要是创建MySQL数据表在ElasticSearch中对应的索引,然后把整理的对应字段的映射表交给同步数据的人。下面列一份索引创建的json作为例子参考:
PUT wb_cpc_sbv_search_keyword_report
{
"settings" : {
"index.mapper.dynamic" : "true",
"number_of_shards" : 1,
"number_of_replicas" : 0,
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
},
"mappings": {
"_doc": {
"dynamic": "true",
"properties": {
"id": {
"type": "integer"
},
"date": {
"type": "date"
},
"account": {
"type": "keyword"
},
"site": {
"type": "keyword"
},
"type_id": {
"type":"keyword"
},
"type": {
"type":"keyword"
},
"_site_account_type_id_search_item": {
"type":"keyword"
},
"search_item": {
"type":"keyword"
},
"target_type": {
"type":"keyword"
},
"match_type": {
"type":"keyword"
},
"keyword_text": {
"type":"keyword"
},
"group_id": {
"type":"keyword"
},
"group_name": {
"type":"keyword"
},
"campaign_id": {
"type":"keyword"
},
"campaign_name": {
"type":"keyword"
},
"impressions": {
"type":"integer"
},
"clicks": {
"type":"integer"
},
"cost": {
"type":"float"
},
"orders": {
"type":"integer"
},
"sales": {
"type":"float"
},
"viewable_impressions": {
"type":"integer"
},
"video_five_second_views": {
"type":"integer"
},
"video_first_quartile_views": {
"type":"integer"
},
"video_midpoint_views": {
"type":"integer"
},
"video_third_quartile_views": {
"type":"integer"
},
"video_complete_views": {
"type":"integer"
},
"video_unmutes": {
"type":"integer"
},
"created_at": {
"type": "date"
},
"updated_at": {
"type": "date"
},
"deleted_at": {
"type": "date"
}
}
}
}
}
可以看出来创建索引的内容主要分了两部分,第一部分是设置(settings),主要是配置索引,像是分片等的配置,但是这一部分我主要是按照模板来的,并没有做更改,不太懂。第二部分是映射(mappings),主要是配置字段的名称和数据类型,目前经常用到的数据类型有keyword(用在字符串),integer(用在整数),float(用在浮点数)和date(用在日期和时间)。
工作台数据逻辑
下面主要记一下当前工作台部分的数据逻辑,首先是以MySQL每日拉数据组成的数据中心以及其他几个数据渠道,大概是以MySQL做存储数据,然后ElasticSearch在其中扮演的角色是同步要使用的数据,大概也是存储的功能,之所以不直接从数据库取数据而是要加一层ES同步数据,目前我还不太懂,不过耳濡目染听到的ES大概是在数据的汇总和搜索方面很快,比较适合工作台的使用场景。
总结
我个人是不太适应ES这套逻辑的,用json嵌套命令的坏处就是我现在都记不住查找语句咋写来着……学吧老弟,学无止境~
助益的点
term查询和match查询区别是前者不做分词搜索
mapping的作用是定义索引中的字段的名称定义字段的数据类型,比如字符串、数字、布尔字段,倒排索引的相关配置,比如设置某个字段为不被索引、记录 position 等在 ES 早期版本,一个索引下是可以有多个 Type ,从 7.0 开始,一个索引只有一个 Type,也可以说一个 Type 有一个 Mapping 定义。
dynamic定义了这个文档能都被搜索。
嵌套类型是什么东西