ElasticSeach基本概念简要总结

ElasticSeach基本概念简要总结

1.什么是全文检索

1.1 全文检索

​ 先建立索引,再对索引进行搜索的过程就叫全文检索

​ 可以使用 Lucene 实现全文检索。Lucene 是 apache 下的一个开放源代码的全文检索引擎工具包。提
供了完整的查询引擎和索引引擎。

1.2 Lucene中核心概念

分词的目的是为了索引,索引的目的是为了搜索

​ Index:在Lucene中一个索引是放在一个文件夹的,同一文件夹中的所有的文件构成一个Lucene索引。

​ Segment:按层次保存了从索引,一直到词的包含关系:索引(Index) –> 段(segment) –> 文档

(Document) –> 域(Field) –> 词(Term)

​ Document:用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个Document的形式存储在索引文件中的。用户进行搜索,也是以Document列表的形式返回。

​ Field:可以理解为document列的属性。Field有三个属性可选:分词、存储和索引。通过存储属性控制是否对该field的值存储,通过索引属性控制是否对该field索引,通过是否分词来进行索引。这三个属性都是针对field值来设置的,存储的含义是是否在document中存储field值分词建立的索引是放在索引域中的

​ Term:Term是搜索的最小单位,它表示文档的一个词语,Term由两部分组成:它表示的词语和这个词语所出现的Field的名称。

倒排索引:通过分词把词语出现的documentid进行记录下来,再查询的时候先去查到哪些documentid包含这个数据,然后再根据documentid把document数据查出来。

2.ElasticSeach

2.1基本概念

索引库(indices) : indices是index的复数,代表许多的索引,
类型(type)类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引(目前6.X以后的版本只能有一个类型),类似数据库中的表概念。数据库表中有表结构,也就是表中每个字段的约束信息;索引库的类型中对应表结构的叫做映射(mapping) ,用来定义每个字段的约束。
文档(document)存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段(field) 文档中的属性
映射配置(mappings)字段的数据类型、属性、是否索引、是否存储等特性

2.2使用Kibana查看索引库的操作

注意:在ES中,需要进行聚合、排序、过滤的字段其处理方式比较特殊,因此不能被分词,必须使用
keyword 或数值类型。

GET /索引库名/_mapping -----------查看索引库中的所有类型映射
GET /索引库名/_mapping/类型名 --------------查看索引库中的某一类型映射
GET /索引库名/类型名/(documentid) -------------- 查看索引库中某一文档的数据
GET /索引库名/_search -------------常用的有五种查询类型
{
	"_source": [], //指定查询结果的字段,默认是所有字段都会被查出来
	"query":{
		"查询类型":{
			"查询条件":"查询条件值",
			"filter":{} // 对结果集进行过滤
			}
	},
	"sort":[],
	"from":num, //分页查询--起始数据
	"size":num  //分页查询--总共条数
	"highlight": {
		"pre_tags": "<em>",
		"post_tags": "</em>",
		"fields": {
		"查询的字段名": {} //这里表示的是需要查询字段中高亮的字段名称
		}
	}
}

2.3ElasticSearch集群

单点ES存在的问题:无法实现高存储,高可用,高并发(一个集群三者都解决)

2.3.1shard与replica机制

(1)每个document肯定只存在于某一个主分片以及其对应的副本分片中,不可能存在于多个主分片
(2)replica shard是primary shard的副本,负责容错,以及承担读请求负载

注意副本分片只负责读请求,在写请求时,只会在主分片上修改数据,然后再从主分片同步到副本分片

(3)primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改

2.3.2集群写入数据的原理

  1. 客户端选择一个node发送请求过去,这个node就是coordinating node (协调节点)
  2. coordinating node对document进行路由,将请求转发给对应的node。(取模算法选择对应结点
  3. 实际上的node上的primary shard处理请求,将数据保存在本地,然后将数据同步到replica node
  4. coordinating node如果发现primary node和所有的replica node都搞定之后,就会返回请求到
    客户端。

2.3.3集群查询数据原理

  1. 客户端发送一个请求给coordinate node
  2. 协调节点将搜索的请求转发给所有的shard对应的primary shard 或replica shard
  3. query phase(查询阶段):每一个shard 将自己搜索的结果(其实也就是一些唯一标识),返回
    给协调节点,有协调节点进行数据的合并,排序,分页等操作,产出最后的结果
  4. fetch phase(获取阶段) ,接着由协调节点,根据唯一标识去各个节点进行拉取数据,最终返回
    给客户端。
上一篇:开发中的BackgroundWorker类就是异步事件模式的一种实现方案


下一篇:一文彻底搞清 Kafka 的副本复制机制