项目优化->ElasticSearch7(安装及注意事项)
2020-09-30
b
背景
最近公司给外包做的一个项目我们接手维护了。一个HIS系统,随着部署的机构越来越多,数据库扛不住压力了。经常CPU飙的人血脉膨胀,在经过了一系列的优化(包括业务层面,代码优化,SQL优化)之后,随着数据量的不断增加,数据库还是顶不住了。
方案
1.分表分库
改动量太大。PASS
2.数据库分区
改动量还是不小,也是pass。
3.引入elasticsearch做搜索。
通过
使用
由于很久之前使用的是6.x版本,相对于现在来说已经是诺基亚了。而且与新版本相比做了很大的改动,其中最大的改动就是淘汰了(慢慢淘汰,听说8.x会去除)类型(types),API也有挺多不同。在优化完成后记录下本次使用。
概念
- 1.索引
- 2.字段类型(mapping)
- 3.文档(documents)
- 4.分片(倒排索引)
elasticsearch是面向文档的。
和关系型数据库的对比。elasticsearch是面向文档的,一切都是json。

物理设计
elasticsearch在后台把每个索引划分成多个分片(主分片和复制分片不在同一个节点内),每份分片可以在集群中的不同服务器间迁移。
一个人就是一个集群!默认的集群名称就是elasticsearch

逻辑设计
elasticsearch是面向文档的,意味着索引和搜索数据的最小单位是文档。elasticsearch中,文档有几个重要属性
- 自我包含,一篇文档同时包含字段和对应的值,(json)
- 可以是层次类型的,一个文档中包含子文档,复杂的逻辑实体就是这么来的
- 灵活的结构,文档不依赖预先定义的模式,在elasticsearch中,对于字段的定义是非常灵活的,有时候我们可以忽略该字段,或者动态添加一个新字段
- 每个字段的类型非常重要。因为elasticsearch会保存字段和类型之间的映射和其他设置。这种映射具体到每个映射的每种类型。
- 总结:文档就是我们的一条条数据。
类型
类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称为映射,比如name映射成字符串类型。文档是无模式的,不需要拥有映射中所定义的所有字段。
倒排索引
采用Lucene倒排索作为底层。将每个文档拆分成独立的词条,然后创建一个包含所有不重复词条的排序列表。然后列出哪个词条出现在哪个文档。
IK分词器
如果要使用中文,建议使用IK分词器。
IK分词器提供了两种分词算法:ik_smart和ik_max_word。其中ik_smart为最少切分,ik_max_word为最细粒度划分。
ik词库扩展

安装
解决跨域
elasticsearch.yml添加跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
其他
- es不能使用root账户启动
- kibana汉化
注意
版本要一致。

