ElasticSearch(一) — 基础知识

一、 什么是ElasticSearch

Elasticsearch 是一个基于Lucene的分布式搜索引擎,提供搜集、分析、存储数据三大功
能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,
restful 风格接口,多数据源,自动搜索负载等。广泛应用于全文搜索、日志分析和实时数据分析等领域。

重点词汇:

分析: 可以进行文档的多种聚合、统计分析功能。

restful 风格接口: 搜集,分析,查询都提供了restful风格的接口, 用户调用restful接口完成与Elasticearch的几乎所有的操作。

主要特点:

1.实时分析

2.分布式实时文件存储,并将每一个字段都编入索引

3.文档导向,所有的对象全部是文档

4.高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)接口友好,支持 JSON

二、倒排索引

倒排索引是ElasticSearch引擎的核心数据结构,其主要作用是从文档中提取关键词,并建立关键词到文档的映射关系。这种结构与传统的正排索引(即文档到关键词的映射)相反,因此称为倒排索引。
在倒排索引中,每个关键词都关联着包含该关键词的文档列表,这使得搜索操作能够迅速定位包含特定关键词的文档,从而大幅提高查询效率。

通俗点解释就是:
倒排索引就是,将文档中包含的关键字全部提取处理,然后再将关键字和文档之间的对应关系保存起来,最后再对关键字本身做索引排序。用户在检索某一个关键字是,先对关键字的索引进行查找,再通过关键字与文档的对应关系找到所在文档。

举例说明:
现在要把下面几首诗词录入es中:

蜀道难(唐)李白
蜀道之难难于上青天,侧身西望长咨嗟。
静夜思(唐)李白
举头望明月,低头思故乡。
春台望(唐)李隆基
暇景属三春,高台聊四望。 鹤冲天(宋)柳永 黄金榜上,偶失龙头望。明代暂遗贤,如何向?未遂风云便, 争不恣狂荡。何须论得丧?才子词人,自是白衣卿相。烟花巷陌,依约丹青屏障。幸有意中人,堪寻访。且恁偎红翠,风流事,平生畅。青春都一饷。忍把浮名, 换了浅斟低唱!

上面几首诗词的"望"字和"上"字,倒排索引会这样存:

序号关键字蜀道难静夜思春台望鹤冲天
1
2

这就是倒排索引的存储方式。所谓的正排索引,就是记录每首诗词中每个字都有哪些。

三、 基础概念

es中有索引、文档、映射、映射类型、文档字段概念,为了方便理解,可以和关系数据库中的相关概念进行个比对:

关系数据库ES
索引(Index)
映射类型(Mapping Type)
数据行文档(Document)
字段文档字段(Field)
字段类型映射(Mapping)

需要注意的是,es中的映射类型(Mapping Type)在es7中已经废弃。每个索引下只有一个_doc的映射类型。
下面详细解释每个概念。

索引:

Elasticsearch 索引是映射类型的容器。一个 Elasticsearch 索引非常像关系型
世界的数据库,是独立的大量文档集合。
当然在底层,肯定用到了倒排索引,最基本的结构就是“keyword”和“Posting List”,Posting list 就是一个 int 的数组,存储了所有符合某个 term 的文档 id。
另外,这个倒排索引相比特定词项出现过的文档列表,会包含更多其它信息。它会保存每一个词项出现过的文档总数, 在对应的文档中一个具体词项出现的总次数,词项在文档中的顺序,每个文档的长度,所有文档的平均长度等等相关信息。

文档 (Document)

文档是 es 中所有可搜索数据的最小单位,比如日志文件中的日志项、一部电影的具体信息等等。

文档会被序列化 JSON 格式保存到 ElasticSearch 中,JSON 对象由字段组成,每个字段都有对象的字段类型(字符串,数值,布尔,日期,二进制,范围类型)。同时每个文档都有一个 Unique ID,可以自己指定 ID,或者通过 ElasticSearch 自动生成。所以严格来说,es 中存储的文档是一种半结构化的数据。

映射

映射(mapping)定义了每个字段的类型、字段所使用的分词器等。

可以显式映射,由我们在索引映射中进行预先定义;也可以动态映射,在添加文档的时候,由 es 自动添加到索引,这个过程不需要事先在索引进行字段数据类型匹配等等,es 会自己推断数据类型。

四、 数据类型

在这里插入图片描述

4.1 字符串类型

字符串类还可被分为 textkeyword 类型,如果我们让 es 自动映射数据,那么 es 会把字符串定义为 text,并且还加了一个 keyword类型字段。

text 文本数据类型,用于索引全文值的字段。使用文本数据类型的字段,它们会被分词,在索引之前将字符串转换为单个术语的列表(倒排索引),分词过程允许 ES 搜索每个全文字段中的单个单词。
text适用场景:只要不具备唯一性的字符串一般都可以使用 text。

keyword,关键字数据类型,用于索引结构化内容的字段。使用 keyword 类型的字段,其不会被分析,给什么值就原封不动地按照这个值索引,所以关键字字段只能按其确切值进行搜索。
keyword适用场景:具有唯一性的字符串,例如:电子邮件地址、MAC 地址、身份证号、状态代码…等等。

此外,text和keyword的另一个区别是,text类型存储数据没有长度大小限制,而keyword类型存储数据有长度限制。所以在存储超大字段时,需要设置成text类型。

4.2 数组类型

不需要特殊配置,一个字段如果被配置为基本数据类型,就是天生持数组类型的。任何字段都可以有 0 个或多个值,但是在一个数组中数据类型必须一样

在这里插入图片描述

4.3 对象类型

JSON 文档是有层次结构的,一个文档可能包含其他文档,如果一个文档包含其他文档,那么该文档值是对象类型,其数据类型是对象。当然 ElasticSearch中是没有所谓对象类型的,比如:

put /open-soft/_doc/object
{ 
	"name": ["Apache ShardingSphere"], 
	"lang": "Java", 
	"corp": "JingDong", 
	"stars":400, 
	"address":{ "city":"BeiJing", "country":"亦庄"}
}

存入es后的结构是:
在这里插入图片描述

4.4 日期类型

在 JSON 文档中,日期表示为字符串。Elasticsearch 使用一组预先配置的格式来识别和解析这些字符串,并将其解析为 long 类型的数值(毫秒),支持自定义格式,也有内置格式。
比如:

PUT my_index
{ "mappings": 
	{ "_doc": 
		{ "properties": 
			{ "date": 
				{ "type": "date", "format": "yyyy-MM-dd HH:mm:ss"
				}
			}
		}
	}
}
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敲代码的小小酥

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值