java35-elasticSearch7.6

97 阅读3分钟

一、elasticSearch简介

ES是一个开源的高扩展的分布式全文搜索引擎,它可以几乎实时的存储、检索数据。核心是lucene,一个强大的搜索库,他的倒排索引比B+的索引还要快

二、ES的核心概念

集群,节点,索引,类型,文档,分片,映射是什么?

首先是集群,下面包含多个节点,而每一个节点对应的都是一个个ElasticSearch进程。

ES在后台的把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移,保证了ES的高可用性

elasticsearch是面向文档的 (最小的单位就是文档),一切都是JSON

查找的过程,索引-》类型-》文档的id通过这个组合可以所以到某个具体的文档 ID不必是整数,可以使一个具体的字符串

文档:就是我们的一条条记录
索引:相当于数据库
划分成多个分片存储文档,一个分片就是一个个的Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字

重点: 倒排索引

elasticsearch使用的是一种称为倒排索引 |的结构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成, 对于每一个词,都有一个包含它的文档列表。 例如,现在有两个文档,每个文档包含如下内容:

Study every day, good good up to forever  # 文 档1包含的内容
To forever, study every day,good good up  # 文档2包含的内容

为创建倒排索引,我们首先要将每个文档拆分成独立的词(或称为词条或者tokens) ,然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在哪个文档:

假如:比如我们通过博客标签来搜索博客文章。那么倒排索引列表就是这样的一个结构:

博客文章ID      标签           标签(倒排索引)     博客文章ID
1             python            python            1.2.3
2             python            linux             3.4
3             linux python   
4             linux

如果要搜索含有python标签的文章,那相对于查找所有原始数据而言,查找倒排索引后的数据将会快的多。只需要查看标签这一栏,然后获取相关的文章ID即可。完全过滤掉无关的所有数据,提高效率!

因为一个ES索引包含多个分片,每一个分片都是lucene索引组成。而每一个分片用于存储文档。lucence用来有效的查找对应的文档

IK分词器:将一段的中文划分为一个个关键字 搜索的时候将自己的信息进行分词

  • 两个分词算法:ik_smart(最少切分),ik_max_word(最细粒度划分)

Rest风格,更易于实现缓存机制