elasticsearch倒排索引
创建倒排索引是对正向索引的一种特殊处理和应用,流程如下:
- 将每一个文档的数据利用分词算法根据语义拆分,得到一个个词条
- 创建表,每行数据包括词条、词条所在文档id、位置、出现次数等信息
- 因为词条唯一性,可以给词条创建正向索引
倒排索引,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
es索引文档过程
Elasticsearch 中索引文档的一般过程:
- 创建索引(Index):在 Elasticsearch 中,首先需要为文档指定一个索引,索引是文档的逻辑容器,类似于关系型数据库中的数据库。可以通过 REST API 或者编程客户端创建索引。
- 定义映射(Mapping):在创建索引时,可以定义文档的映射,即每个字段的数据类型和属性。映射定义了文档的结构,包括字段名、数据类型、分词器等信息。
- 索引文档(Indexing):一旦索引和映射准备就绪,就可以开始索引文档了。文档是 Elasticsearch 存储、索引和搜索的基本单位,通常以 JSON 格式表示。将文档发送到 Elasticsearch 的特定索引中,Elasticsearch 将文档解析、索引并存储。
- 文档存储:Elasticsearch 将文档存储在倒排索引中,以便快速地进行全文搜索。文档被分割成多个字段,并根据字段类型进行索引化处理。如果是要索引且需要分词的,则先利用分词器进行分词,过滤,然后再形成倒排索引。
es搜索步骤
- 创建搜索请求对象,指定索引库名
- 设置搜索请求对象参数;搜索类型(范围、词条、搜索关键字分词搜索等)、分页、排序、高亮、聚合等;
- 执行请求;
- 解析响应结果
es相对mysql的特点是什么
MySQL更擅长的是事务类型的操作,存储结构化数据;
ES更擅长的是海量数据的搜索,分析和计算,不支持事务;存储非结构化数据;
es集群情况
ES集群架构6个节点,索引:3分片;ES调优:在设计映射阶段针对数据搜索情况合理设置数据类型,尽可能多的设置keyword类型域;根据需要设置不同域的索引、查询分词器;查询时尽可能少使用模糊和相似查询。
如果数据量增长迅速,数据过大如何解决?可以重新创建索引(指定更多的集群节点和分片),然后将原数据导入再次导入。(注意:es在创建索引后不能直接扩容)