Elasticsearch 第一期:基础的基础概念

news/2024/7/1 3:51:15

前言

Elasticsearch(弹性搜索) ,简称为ES, 它是一个开源的高扩展的分布式全文检索引擎,它提供的功能主要分为:实时存储,实时分析搜索;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

ES核心也是基于 Lucene 来实现所有索引和搜索的功能,其开发者开发ES的初衷是希望通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

据国际权威的数据库产品评测机构 DB Engines 的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。

常见概念介绍

Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档。Elasticsearch 不仅存储文档,而且 索引 每个文档的内容,使之可以被检索。

上面提到了两个关键字--文档,索引。可以说这个两个词是ES的基石。

文档

在以Java为代表的面向对象语言中,对象是操作的基本单位。对于ES而言,文档的概念可以类比对象。不过,有一个区别: 对象仅仅是类似于  hashmap 、字典或者JSON 对象,对象中也可以嵌套其他的对象。在 ES中,术语 文档 有着特定的含义。它是指根对象(最顶层), 这个根对象被序列化成 JSON 并存储到 ES 中,指定了唯一 ID。

上面又提到一个新词——根对象,要理解根对象,那么就需要分析ES文档的内容和组成了。下面展示了一个基础的格式化后的ES文档数据。以key的格式可以划分了两类,带"_"的字段(即文档元数据,如_id,_index等)和普通字段(即真实的内容,如workerName)。

对于一个文档而言,重要的文档源数据三个,_index_type_id。通过这三个元数据即可定位到一个明确的文档。其中_index,也就是前面提到 索引。 索引 可以说是具有共同特性的文档集合。

在一个索引中也可以有多个类别的文档,对于文档类别则使用_type来声明,相当于在索引中对数据进行逻辑分区。在 7.0 之前,每一个索引是可以设置多个 Types 的,每个 Type 会拥有相同结构的文档,但是在 6.0 开始,Type 已经被废除,在 7.0 开始,一个索引只能创建一个 Type,也就是 _doc

当然对于每个文档都有一个唯一标识:_id。id是一个字段串,若不指定,默认是一个Base64 编码的 UUID。

{
        "_id": "198278367",
        "_index": "hcm_worker",
        "_type": "_doc",
        "_score": 1,  
        "_source": {
            "workerName": "小明",
            "workerNo": "U12093",
            "workerTag": [
                {
                    "key": "年龄",
                    "value": [ "30~40"]
                }
            ]
        }
}

索引

接下来介绍ES中另一个重要的概念---索引。对于MySQL数据库,索引可以说是最基础的一个概念,ES中的索引与MySQL中的索引概念有所不同。在ES中索引有名词和动词两种含义。

对于名词含义,如前所述,索引是具有共同特性的文档集合。类似于传统关系数据库中的一个 数据表 ,是一个存储关系型数据的地方。

对于动词含义,索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的  INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。

和MySQL使用B+树索引 到指定的列上,来提升数据检索速度。ES也有MySQL索引的类似功能,即倒序索引,用于快速的全文搜索。

关于倒排索引的介绍,下面的博客介绍的很详细,可参考。

ES之倒排索引详解_es倒排索引-CSDN博客

总结

这里只是简单介绍了ES最基础的两个概念:文档和索引。后续的搜索,排序,分布式等等都是基于这两个概念发展的。也会继续学习进行整理。

https://www.cnblogs.com/crazymagic/articles/14512958.html


http://lihuaxi.xjx100.cn/news/2215584.html

相关文章

leetcode 130被围绕的区域

思路 一个区域不能被围绕是这个区域有部分在边界 可以循环边界,找边界的区域(利用深搜),这些都不能被围绕,其余的,能被围绕,应该从"O"变为”X“ 代码 static boolean[][] hasGo;/…

echarts学习:通过图例事件实现选中后控制多条折线的显隐

1.问题描述 我在工作中遇到了这样一个需求:我们都知道点击echarts折线图的图例,是可以控制折线的显隐的。我现在希望点击某一个图例可以改变多条折线的显隐。 例如在下面这张图中,我将“xxx水位”和“yyy水位”分为一组;将“xxx…

C#面:C#支持多重继承么?

C#不支持多重继承。在C#中,一个类只能直接继承自一个基类。这是由于C#的设计目标之一是避免多重继承可能带来的复杂性和潜在的问题。 然而,C#提供了接口(interface)的概念来实现类似多重继承的功能。一个类可以实现多个接口&…

IT人的拖延——这个任务太复杂,太难了怎么办?

随着科技的发展,IT人需要不断地运用新技术来解决更多传统方式难以解决的问题,有些问题真的不是不想解决,而是真的太复杂,太难了,根本不知道从何开始,也没有什么前辈的经验可以借鉴。我们这些对事情难度的认…

Gson的常见用法

一引入依赖 <!-- json解析的工具包 --> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> <!-- 主要为了代码简洁和日志打印 --> <…

三生随记——茶叶的诅咒

在遥远的深山中&#xff0c;有一个被浓雾常年笼罩的古村落。这里的人们生活简朴&#xff0c;与外界几乎隔绝&#xff0c;他们唯一的财富&#xff0c;便是那满山遍野的奇特茶叶。这种茶叶的叶片深绿如玉&#xff0c;散发着诱人的香气&#xff0c;被称为“幽雾灵茶”。 然而&…

Opencv无法自动补全

执行下面两条命令&#xff1a; 特别说明: 即使能补全了&#xff0c;但是还是有弊端&#xff0c;写参数的时候没有参数的候选项&#xff0c;所以相当于只能补全个函数名&#xff0c;谁有更好的解法&#xff0c;恳求留言告知。 参考1&#xff1a;https://blog.csdn.net/yuezhilan…

QT 使用资源文件的注意点

不要存放没有使用的资源文件 即使在代码中没有使用到的资源文件&#xff0c;也会编译到执行文件或者DLL里面去这样会增大它的体积。如下 在代码没有使用这个资源文件(10.4M的2k图片)&#xff0c;但是编译出来的程序有 12M左右的大小