搬运来自:http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
https://www.cnblogs.com/ajianbeyourself/p/5529575.html


ElasticSearch和Lucene

这里写图片描述

著名的开源程序Lucene是为索引组件,它提供了搜索程序的核心索引和搜索模块,例如图中的“Index”及下面的部分;而ElasticSearch则更像一款搜索组件,它利用Lucene进行文档索引,并向用户提供搜索组件,例如“Index”上面的部分。二者结合起来组成了一个完整的搜索引擎。

ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。

索引(Index)

索引的概念是全文检索中一个很重要的部分。从非结构化数据中提取出的然后重新组织的信息,我们称之索引,索引包含了词典和倒排文档链表。

ES(ElasticSearch) 会索引所有字段,经过处理后写入一个反向索引(Inverted Index 由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引)。查找数据的时候,直接查找该索引。

所以,Elastic 数据管理的顶层单位就叫做 Index(索引)索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

文档(Document)

文档是Lucene索引和搜索的原子单位。
许多条 Document 构成了一个 Index,类比传统数据库中的记录条。
Document 使用 JSON 格式表示,下面是一个例子。

{
“user”: “张三”,
“title”: “工程师”,
“desc”: “数据库管理”
}

类型(Type)

类型是索引内部的逻辑分区(category/partition),其意义完全取决于用户需求(自定义)。因此,一个索引内部可定义一个或多个类型(type)。类比传统的关系型数据库领域来说,类型相当于“表”

比如天气weather这个 Index 索引里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。

需要特别注意的是:

不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个Type是字符串,在另一个Type是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)

根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。

域(field)

document文档是一个包含了一个或多个域的容器,而域的值则是真正被搜索的内容。每个域都有其标识名称,通常为一个文本值或二进制值。将文档加入索引中时,需要首先将数据转换成Lucene能识别的文档和域,域值是被搜索的对象。例如,用户输入搜索内容“title:elasticsearch”时,则表示搜索“标题”域值中包含单词“elasticsearch”的所有文档。

域可以与传统数据库中的字段进行类比

索引–类型–文档–域的关系

索引—数据库
类型—表
文档—表中的一行数据
域—表中的字段

映射(Mapping)

ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何分词,即如何将文本分割成词元(token)、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐