ElasticSearch6.x入门?看这一篇就够了

什么是ES?

ES 是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)

相关概念知识

以下解释仅仅为了方便理解,不代表等同。

  • 分片:类似小说分章节
  • Index(索引):类似关系型数据库中的数据库
  • Type: 类似关系型数据库中的表。在 ES 6.x 中只允许每个 Index 中包含一个 Type。在 7.x 版本中将彻底移除 Type。
  • Document(文档):是存储在Elasticsearch中的JSON文档。它就像关系数据库中表中的一行
  • field:相当于列
  • id:标识一个文档,必须是唯一的。如果没有提供ID,则会自动生成
  • mapping:定义一个type

相关结构

ES默认会有5个分片,1个备份

 

数据类型

字符串类型

  • text:当一个字段是要被全文搜索的,比如产品描述,应该使用text类型。text类型的字段不用于排序,很少用于聚合。
  • keyword:类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤、排序、聚合。keyword类型的字段只能通过精确值搜索到。

整数类型

在满足需求的情况下,尽可能选择范围小的数据类型。比如,某个字段的取值最大值不会超过100,那么选择byte类型即可。迄今为止吉尼斯记录的人类的年龄的最大值为134岁,对于年龄字段,short足矣。

字段的长度越短,索引和搜索的效率越高。

类型取值范围
byte-128~127
short-32768~32767
integer-2^31~2^31-1
long-2^63~2^63-1

浮点类型

类型取值范围
doule64位双精度IEEE 754浮点类型
float32位单精度IEEE 754浮点类型
half_float16位半精度IEEE 754浮点类型
scaled_float缩放类型的的浮点数

时间类型

日期将始终以字符串形式呈现,即使最初在JSON文档中提供的日期很长也是如此。  format可以是如下这种||的形式

"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"

布尔类型

布尔字段接受JSONtruefalse值,但也可以接受为 "true" 或 "false" 的字符串

范围数据类型

integer_range

一个带符号的32位整数范围,最小值为-2^31,最大值为2^31-1

float_range

一系列单精度32位IEEE 754浮点值。

long_range

一系列带符号的64位整数,最小值为-2^63,最大值为2^63-1

double_range

一系列双精度64位IEEE 754浮点值。

date_range

自系统时代以来经过的一系列日期值,表示为无符号的64位整数毫秒。

ip_range

支持IPv4或 IPv6(或混合)地址的一系列ip值。

RestFul风格操作

GET请求:

  • http://ip:port/index : 查询索引信息
  • http://ip:port/index/type/doc_id : 查询指定的文档信息

POST请求:

  • http://ip:port/index/type/_search : 查询文档,可以在请求体中添加json字符串来代表查询条件
  • http://ip:port/index/type/doc_id/_update : 修改文档,在请求体中指定json字符串代表修改的具体信息

PUT请求:

  • http://ip:port/index : 创建一个索引,需要在请求体中指定索引的信息,类型,结构
  • http://ip:port/index/type/_mappings : 代表创建索引时,指定索引文档存储的属性的信息

DELETE请求:

  • http://ip:port/index : 删库跑路
  • http://ip:port/index/type/doc_id : 删除指定文档
     

倒排索引结构

如何理解倒排索引呢?假如现有三份数据文档,文档的内容如下分别是:

  • Java is the best programming language.
  • PHP is the best programming language.
  • Javascript is the best programming language.

为了创建倒排索引,我们通过分词器将每个文档的内容域拆分成单独的词(我们称它为词条或 Term),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。

结果如下所示:

Term          Doc_1    Doc_2   Doc_3
-------------------------------------
Java        |   X   |        |
is          |   X   |   X    |   X
the         |   X   |   X    |   X
best        |   X   |   X    |   X
programming |   x   |   X    |   X
language    |   X   |   X    |   X
PHP         |       |   X    |
Javascript  |       |        |   X
-------------------------------------

这种结构由文档中所有不重复词的列表构成,对于其中每个词都有一个文档列表与之关联。这种由属性值来确定记录的位置的结构就是倒排索引。带有倒排索引的文件我们称为倒排文件。

我们将上面的内容转换为图的形式来说明倒排索引的结构信息,如下图所示:

其中主要有如下几个核心术语需要理解:

  • 词条(Term):索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。

  • 词典(Term Dictionary):或字典,是词条 Term 的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

  • 倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。

  • 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoneWalker、

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值