项目优化->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。

image.png

物理设计

elasticsearch在后台把每个索引划分成多个分片(主分片和复制分片不在同一个节点内),每份分片可以在集群中的不同服务器间迁移。

一个人就是一个集群!默认的集群名称就是elasticsearch

image.png

逻辑设计

elasticsearch是面向文档的,意味着索引和搜索数据的最小单位是文档。elasticsearch中,文档有几个重要属性

  • 自我包含,一篇文档同时包含字段和对应的值,(json)
  • 可以是层次类型的,一个文档中包含子文档,复杂的逻辑实体就是这么来的
  • 灵活的结构,文档不依赖预先定义的模式,在elasticsearch中,对于字段的定义是非常灵活的,有时候我们可以忽略该字段,或者动态添加一个新字段
  • 每个字段的类型非常重要。因为elasticsearch会保存字段和类型之间的映射和其他设置。这种映射具体到每个映射的每种类型。
  • 总结:文档就是我们的一条条数据。
类型

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称为映射,比如name映射成字符串类型。文档是无模式的,不需要拥有映射中所定义的所有字段。

倒排索引

采用Lucene倒排索作为底层。将每个文档拆分成独立的词条,然后创建一个包含所有不重复词条的排序列表。然后列出哪个词条出现在哪个文档。

IK分词器

如果要使用中文,建议使用IK分词器。

IK分词器提供了两种分词算法:ik_smart和ik_max_word。其中ik_smart为最少切分,ik_max_word为最细粒度划分。

ik词库扩展

image.png

安装

解决跨域

elasticsearch.yml添加跨域配置

http.cors.enabled: true
http.cors.allow-origin: "*"
其他
  • es不能使用root账户启动
  • kibana汉化
    • image.png
    • image.png
注意

版本要一致。