Springboot+ElasticSearch 项目实战(一)

一、项目需求

部门需要做一个统计年鉴系统,类似于 cnki 里面的中国经济社会大数据研究平台里面的。将数据查询出来后,以可视化图表展示出来。现在是有 360 多万条数据,要是还是用 Springboot+Mybatis 的话查询会很慢,于是有个同事建议用 ES 相关技术。

统计年鉴字段和数据如图所示:

Springboot+ElasticSearch 项目实战(一)_第1张图片

主要介绍下: citytr 表示所在城市、index_name 表示指标名称,year 表示年份,其他字段无需介绍;

现在总体来说,有两大功能要实现:

第一,要做个类似于百度的搜索框,即在搜索框中输入城市、年份、指标的任意组合和任意顺序,都要搜索出结果,这个是模糊查询,且是并查询,如输入"北京市 2015 人口",则得到北京市2015年与人口相关的指标(如年平均人口、总人口等)的所有数据;

第二,要做出高级搜索,即选择完城市(可选择多个城市)和年份(可选择多个年份)后,得到所选城市和年份里面的指标,然后选择指标,最后根据所选城市、年份、指标进行精确查询,且是或查询,如选择北京市、广州市、2014、2015,则得到指标列表(可能有成千上万个),然后选择某几个指标如 年平均人口、建筑业从业人员数,则最后得到的是城市、年份、指标的交叉或集,即北京市2014年指标为年平均人口的数据+广州市2014年指标为年平均人口的数据+北京市2015年指标为年平均人口的数据+广州市2015年指标为年平均人口的数据+北京市2014年指标为建筑业从业人员数的数据+广州市2014年指标为建筑业从业人员数的数据+北京市2015年指标为建筑业从业人员数的数据+广州市2015年指标为建筑业从业人员数的数据(如果这些数据在数据库中存在的话)。

二、ElasticSearch 搭建

由上面的需求可知,既需要模糊查询,又需要精确查询,且由于在搜索框中也要能输入年份进入模糊查询,要是把年份 year 设置为 integer ,则会报错,因此把 year 字段设置为 text 类型,且其他字段类型为了可以分词,也优先选择为 text 类型(此处 elasticsearch 分词插件为 elasticsearch-analysis-ik,其中 ik_max_word 会对文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;ik_smart 会对文本做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”)

启动完 ElasticSearch 之后,在 Postman 里面运行如下(注我的 Postman 是 chrome 插件版的):

Springboot+ElasticSearch 项目实战(一)_第2张图片

则在 ES 里面成功新建 yearbook 索引。新建完之后,将数据通过 logstash 导入到 ES 中,参考:https://blog.csdn.net/Ocean111best/article/details/85560670

注意 csv 文件要转化为 utf-8 格式,否则有中文的话会乱码。

至此,ES 的搭建和数据上传完成。

 

 

 

 

你可能感兴趣的:(Elasticsearch,Java)