当前位置:   article > 正文

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

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

前言

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。

  1. {
  2. "_id": "198278367",
  3. "_index": "hcm_worker",
  4. "_type": "_doc",
  5. "_score": 1,
  6. "_source": {
  7. "workerName": "小明",
  8. "workerNo": "U12093",
  9. "workerTag": [
  10. {
  11. "key": "年龄",
  12. "value": [ "30~40"]
  13. }
  14. ]
  15. }
  16. }

索引

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

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

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

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

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

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

总结

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/722384
推荐阅读
相关标签
  

闽ICP备14008679号