Elasticsearch(二) Elasticsearch简介及核心概念倒排索引

一. 我到底能够使用 Elasticsearch 做什么?

通过 Elasticsearch,您能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。先从一个简单的问题出发,试试看能够从中发现些什么。 作为一个分布式搜索服务

1. 它可以进行快速进行全文搜索

2. 可扩展性:  支持PB级别数据的存储,以及成百上千的集群

3. 大数据处理, 数十亿行日志的聚合处理

4. 通过相关度(_score)对所有内容搜索

基于各项元素(从词频或新近度到热门度等)对搜索结果进行排序。将这些内容与功能进行混搭,以优化向用户显示结果的方式。

5. 弹性处理. 故障转移, 跨集群复制


二. Elasticsearch数据结构

我们通过与MySQL的对比, 来快速了解Elasticsearch数据架构

如图所示: 

1. 其中数据库对应ES中的Index(索引库)

2. 而Table对应Type, 7.8以后'type'概念删除了, 可以理解一个Index库只存储一个种类型的数据

3. 数据库中的一条记录 => ES中的一个文档记录document

4. 数据库表中的字段 => ES 中的Field字段

5. 数据库表中的字段类型映射 => ES中的mapping映射

 

三. 倒排索引

Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

很难理解对吧, 这里博主引入了实际场景来进行解释: 

假设我们MySQL 有两条记录,对应ES中的两个文档,每个记录的 content 字段包含如下内容:

      doc1: 天空中有只小鸟

      doc2: 天空中有只大雁

为了创建倒排索引,我们首先将每个文档的 content 字段(通过分词器,分析器)拆分成单独的词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:

Term(分词)      Doc_1  Doc_2
-------------------------
天空           |   X   |  X
小鸟           |   X   |
大雁           |       |  X
------------------------

现在,如果我们想搜索 天空小鸟 ,我们只需要查找包含每个词条的文档:

Term      Doc_1  Doc_2
-------------------------
天空   |   X   |  X
小鸟   |   X   |
------------------------
Total   |   2   |  1

两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。


注意:

分词器在进行分词的时候会将所有的单词进行小写, 例如字段内容中包含的 Hello 会在 ES存储的时候分词为 hello, 所以进行term完全匹配搜索的时候必须使用小写, 当然进行全文匹配match时候则没有关系, 这个搜索我们后面的博文中会详细说明

你可能感兴趣的:(ElasticSearch,elasticsearch)