0%

Elasticsearch入门笔记(一)

Elasticsearch入门笔记(一)

前言

​ 在工作的中使用到部分ElasticSearch沾边的东西,ELK日志实时分析系统,对ElasticSearch也略有耳闻,趁着最近有时间学习一下,并将学习过程中知识点记录下来。

介绍

ElasticSearch是基于Luncene的分布式高性能的全文搜索引擎,Luncene是使用java开发的一个全文搜索引擎工具包,而ElasticSearch它将Luncene的复杂性对用户屏蔽,提供简单易用的Restful Api,开发者只需要使用该api接口就可以使用全文搜索。

安装

​ 我使用的是mac电脑,使用的是docker desktop for mac工具,通过Kitematic工具直接搜索了elasticSearch进行安装,我安装的镜像是blacktop/elasticsearch版本是7.10.1,它只挂载了data目录,我本地通过容器管理工具将plugins路径也挂载出来,方便添加分词器。

​ 同时还需要使用到google插件elasticsearch-head便于查看数据等情况;同样使用了docker安装了blacktop/kibana镜像,kibana内置了解析器,对esrestful api有对应的支持。

基本概念

1. 集群

es本质上就是一个分布式系统,允许多台服务器协同工作,可以在一台服务上部署多个es实例,每一个实例称为一个节点。本想模拟单机多节点的集群情况,花了很多时间发现各个节点之间就是无法访问到,不知道主要原因是不是由于macos的容器机制,导致宿主机无法直接访问容器ip导致。

2. 索引

es的数据管理顶层单位称为索引Index,它类似于关系数据库中的库的概念,也就是每一个Index就是一个数据库,且规定名称必须为小写

3.类型

​ 索引Index下就是类型Type,类似于关系数据库中的表的概念,但是在6.x版本之后,一个Index值允许一个Type,所以类似于一个库中只允许一张表。

4.文档

Type下就是文档Document,一个Type包含多个Documentdocument类似于关系数据库中一行记录。

5.分片

es的数据是存储在节点上,每个索引的数据量不一样,需要的计算和处理数据的能力不一样,所以在创建每一个索引是可以同时创建的分片数,将数据处理分散到不同的节点。同时还分为主分片和副本分片,副本分片是主分片的一个备份,若主分片所在的节点宕机,启用改节点主分片的副本分片,所以主分片和副本分片将落在不同的节点。

关系型数据库和es基本结构概念对比

关系型数据库 es
Index
Type
Document
一行中的某一列 Field(es是使用json表达数据)
索引 全文索引(这个地方有可能出现理解的误差,二者在各自结构中的意思都是加快查询数据的速度)

6.倒排索引

​ 倒排索引是es中比较核心的一个概念,是指从文档的词项映射文档ID的一个过程。在关系型数据库中,一般采用的是正排索引,即从数据ID查询某个数据的关系。

比如有以下数据:

id name age address
1 张三 10 福建省福州市
2 李四 10 福建省莆田市
3 王五 30 福建省泉州市
4 赵六 30 湖南省长沙市
5 孙七 30 福建省南平市
6 钱八 60 浙江省杭州市

以上就是正排索引,当知道某个人的ID就可以通过主键ID去获取这个人的年龄和地址信息。

倒排索引结构:

age字段

词项Term 文档列表
10 [1, 2]
30 [3, 4, 5]
60 6

address字段,当然这里的词项不一定只有xx省,也可以是xx市,这里只是简单举个例子。

词项Term 文档列表
福建省 [1, 2, 3, 5]
湖南省 5
浙江省 6

按以上的结构存储倒排索引之后,若需要查询福建省的所有人,就可以直接根据福建省的词项获取到1,2,3,5四个文档是符合条件,然后在结合正排索引,将这符合这四个id的文档找出。

​ 当然了或许有人会说那不是直接select * from table where address like %福建省%就可以找出数据吗?在关系型数据库中模糊查询是无法命中索引的,也就是说模糊索引是需要全表扫描的,对于es的大数据定位而言是互斥的,所以增加倒排索引使得es的检索效率和性能显著提高。

7.路由

​ 一个索引可以指定多个分片,且在多机的集群环境中,分片可能散落在不同的服务器上,在操作时可以将相关性数据存储在同一个分片上,提高检索效率。

shard = hash(routing) % number_of_primary_shards

数据落在的分片编号 = 哈希函数(routing值)对分片数取余,默认routing值为文档id

分词器

​ 分词器又叫分析器Analyzer,分词器的作用就是将文本经过分析之后转化为词项,在es搜索的最基本单元就是词项Term,通过词项来建立文档之间的映射。在es中又内置了多种基本的分词器,都是对英文的分词。

分词器 作用
Standard Analyzer 英文标准分词器
Whitespace Analyzer 空格分词器
Pattern Analyzer 正则分词器
KeyWord Analyzer 关键词分词器

目前使用的比较多的中文分词器应该是elasticsearch-analysis-ik ,代码托管在github上,可以直接下载之后添加到plugins目录下。

-------------本文结束感谢您的阅读-------------