es

全称:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

具备分布式,高扩展,高实时的特点。它能很方便的使大量数据具有搜索,分析和探索的能力。

可以做日志系统中日志数据存储和搜索,也可以做全文搜索工具注重搜索效率。

核心概念:

Index

索引包含了一堆有相似结构的文档数据,比如商品索引。一个索引包含很多 document,一个索引就代表了一类相似或者相同的 ducument。

Type(最新的版本取消了)

类型,每个索引里可以有一个或者多个 type,type 是 index 的一个逻辑分类,比如商品 index 下有多个 type:日化商品 type、电器商品 type、生鲜商品 type。每个 type 下的 document 的 field 可能不太一样。

Document&field

文档是es中最小的数据单元,他代表一条数据。它由字段(Fields)组成

index -> type -> mapping -> document -> field。

es 核心概念 vs. db 核心概念

es

db

index

数据库

Type(最新版本取消了)

数据表

docuemnt

一行数据

 

Template:

Template 用于规定index中字段的存储格式、index的设置参数等,template 分为两部分,一是setting,主要用于规定index的参数,例如number_of_shards(分片数)、number_of_replicas(副本数)。还有就是设置一些优化index的参数。另一部分是mapping,elasticsearch的mapping类似于数据库的表结构,用于设置字段格式,假如elasticsearch不提前设置mapping,系统会以该字段接收到的第一个数据的类型作为默认字段类型。新建elasticsearch template可以直接在kibana dev tools上执行命令

全文搜索引擎 ES

 

新建index以test*为名的,都会使用此template,其中设置新建index为3个分片1个副本。Location字段数据为geo_point类型,url为text类型,并url使用ik分词。

集群与节点:(物理分区)

集群(cluster):集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的。

节点(node):就是运行的Elasticsearch实例,一台服务器可以部署多个节点。

节点的角色:

node.master:主节点,处理集群的状态并广播到其他节点,并接收其他节点的确认响应。

node.data: 数据存储节点, 存储数据和倒排索引,进行搜索操作,将数据返回给路由节点。

node.ingest: 路由节点 ,实现在索引之前对文档进行预处理。转发请求。

node.client : 作为数据接收,任务分发,返回结果,是整个集群与外部的通讯的中转站。

分片(shard)与副本(replica)(技术分区)

shards(分片):每个分片由一个或者多个片区组成,数据被平均分配到多个片区上,index默认是5个. 每个分片可以对应可以设置0个或者多个replicas(副本)一般副本数量不多,默认是1副本也常有。

基础实现原理

ElasticSearch 的实现原理主要分为以下几个步骤:首先用户将数据提交到Elastic Search 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Lucene是一个开放源代码的全文检索引擎工具包,其中封装了很多建立倒排索引的规则和搜索排序的算法。

倒排索引

分词器将数据分成多个词,这些词存在索引表中都会标记对应的docID,在进行搜索的时elasticsearch 根据我们输入的词(word1)去匹配索引表中的词(word2),根据搜索结果返回相应docID的数据。倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

存贮过程

当分片所在的节点接收到来自协调节点的请求后,会将该请求写入translog,并将文档加入内存缓存。如果请求在主分片上成功处理,该请求会并行发送到该分片的副本上。当translog被同步到全部的主分片及其副本上后,客户端才会收到确认通知。

内存会每隔1秒钟刷新一次,以确保搜索的实时性。translog很大时或者每个30分钟,会清空一次并将数据刷入磁盘中。在机器突然挂机情况下translog可以用来确保数据不丢失。

确保索引数据的一致性通过translog保证,在每次 index、bulk、delete、update 完成的时候,一定触发刷新translog 到磁盘上。

更新删除过程

es中,数据不能立刻被删除。删除只是给他一个标记,在搜索的时候不显示。修改一样将之前的数据标记删除,添加新的数据。这些被标记删除的数据会统一进行清理。

与solr对比

全文搜索引擎 ES

 

两个问题:

es 查询效率优化 :

1, 加大文件内存分配。你的内存最好达到总数据量的一半以上。

2,数据预热 ,做一个子系统对一些比较热门的数据进行预热处理。

3,冷热分离 将冷数据和热数据放在两个不同的索引中,对热数据预热时就不会被冷数据刷掉。

4 ,document 模式设计:es做一些多表关联很麻烦,在一开始设计的时候就不要让他去做这个事情。

分页性能优化:

因为在搜索前1000条数据时,es会把每个节点的前1000条数据全部查出来,到协调节点在进行排序取前1000条。导致在排序情况下越查后面的数据越慢。

1直接说不能深度分页。

就用哪种不断下刷的技术,尽量不要用分页的技术。

参考博客:https://www.cnblogs.com/zwt1990/p/7737747.html

相关文章:

  • 2022-12-23
  • 2021-07-05
  • 2022-02-26
  • 2022-01-15
  • 2021-06-15
  • 2021-04-20
  • 2022-12-23
  • 2022-01-01
猜你喜欢
  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2021-05-24
  • 2021-07-26
  • 2021-06-16
相关资源
相似解决方案