首页 > 其他分享 >Elasticsearch 系列(二)- ES的基本概念

Elasticsearch 系列(二)- ES的基本概念

时间:2023-11-20 22:11:40浏览次数:37  
标签:词条 倒排 id 索引 文档 Elasticsearch 基本概念 ES

本章将和大家分享 Elasticsearch 的一些基本概念。话不多说,下面我们直接进入主题。

一、什么是Lucene

Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API。

1、Lucene的优势:易扩展、高性能(基于倒排索引)

2、Lucene的缺点:只限于Java语言开发、学习曲线陡峭、不支持水平扩展

二、什么是Elasticsearch

Elasticsearch(简称ES)是一个开源的,分布式的全文搜索和分析引擎。它可以帮助我们从海量数据中快速找到需要的内容。

1、Elasticsearch 是基于 Lucene 开发的,相比与Lucene,Elasticsearch具备以下优势:支持分布式,可水平扩展;提供Restful接口,可被任何语言调用。

2、Elasticsearch 结合 Kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。

3、Elasticsearch 是 elastic stack(ELK)的核心,负责存储、搜索、分析数据。

4、官网地址:https://www.elastic.co/cn/

三、什么是elastic stack(ELK)

是以Elasticsearch为核心的技术栈,包括Beats、Logstash、Kibana、Elasticsearch。

四、正向索引和倒排索引

1、什么是正向索引

正向索引:基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条。

传统数据库(如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引:

这是我们传统的正向索引,如果通过索引id去做检索那效率就比较高,但是如果通过局部内容去做检索那效率就比较差了。 

2、什么是文档和词条

文档(document):每一条数据就是一个文档

词条(term):对文档中的内容按照语义分词,得到的词语就是词条

3、什么是倒排索引

倒排索引:对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档。

Elasticsearch采用倒排索引:

文档(document):每条数据就是一个文档

词条(term):文档按照语义分成的词语

例如:对 title 创建倒排索引

倒排索引在做存储的时候,它是将文档中的内容按照语义去分成不同的词条,然后再按照词条去做存储,关联文档id,建立起倒排索引。

搜索过程如下:

倒排索引的搜索过程是经过两次检索的,第一次是根据用户输入内容的词条去词条列表中进行寻找,找到对应的文档id,第二次则是拿着文档id去找文档。虽然经历了两次查找,但是每一次查找都是索引级别的查找,所以总体的查询效率是比较高的。

五、基本概念

1、字段(Field)

字段:类似MySQL中的一个字段。

2、文档(Document)

文档:一条数据,用json格式表示。Elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在Elasticsearch中。

3、类型(Type)

类型:逐渐被弱化的概念,Type就像关系型数据库MySQL中的表,如用户表、商品表等。注意:在Elasticsearch7.x中,一个索引库下只有一张表,建表时不能给表取表名,默认表名为_doc。

4、索引(Index)

索引:相同类型文档的集合,类似MySQL数据库中的表。(由于Elasticsearch7.x版本之后,就删除了Type类型,默认Type就是_doc,不然ES中的索引库更像是MySQL中数据库的概念)

5、映射(Mapping)

映射:索引中文档的字段约束信息,类似表的结构约束

6、Query DSL

Query DSL:ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON风格的请求语句,用来操作Elasticsearch,实现CRUD。

7、分片(shard)

分片:可以将一个Index中的数据切分为多个shard,然后存储到多台服务器上,以增大一个Index可以存储的数据量,加速检索能力,提升系统性能。

8、副本(replica)

副本:与shard存储的数据是相同的,起到备份作用。当shard发生故障时,可以从replica中读取数据,保证系统不受影响。

9、节点(Node)

节点:单个Elasticsearch实例,一台机器可以有多个节点。节点名称默认随机分配。

10、集群(Cluster)

集群:一组Elasticsearch实例,默认集群名称为 elasticsearch 。

11、概念对比

MySQL  Elasticsearch  说明
 Table  Index  索引(Index),就是文档的集合,类似数据库的表(Table)。(由于Elasticsearch7.x版本之后,就删除了Type类型,默认Type就是_doc,不然ES中的索引库更像是MySQL中数据库的概念)
 Row  Document  文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式。
 Column  Field  字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)。
 Schema  Mapping  映射(Mapping)是索引中对文档的约束,例如字段类型约束,类似数据库的表结构(Schema)。
 SQL  DSL   ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON风格的请求语句,用来操作Elasticsearch,实现CRUD。

12、Elasticsearch与数据库的关系

MySQL:擅长事务类型操作,可以确保数据的安全和一致性。

Elasticsearch:擅长海量数据的搜索、分析、计算。

13、 元数据(Document MetaData)

元数据:用于标注文档的相关信息。

1)_index:文档所在的索引名

2)_type:文档所在的类型名,默认是_doc

3)_id:文档唯一id

4)uid:组合id,由type和id组成

5)_source:文档的原始json数据,可从这里获取每个字段的内容

6)_all:整合所有字段内容到该字段,默认禁用

7)_score:得分

六、ES中的数据类型

1、核心数据类型

1)字符串类型:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

2)数值类型:long、integer、short、byte、double、float、half_float、scaled_float

3)日期类型:date

4)布尔类型:boolean

5)二进制类型:binary

6)范围类型:integer_range、float_range、long_range、double_range、date_range

2、复杂数据类型

1)数组类型:array

2)对象类型:object

3)嵌套类型:nested object

3、地理位置数据类型

1)geo_point

2)geo_shape

4、专用类型

1)记录ip地址:ip

2)实现自动补全:completion

3)记录分词数:token_count

4)记录字符串hash值:murmur3

 

此文由博主精心撰写转载请保留此原文链接:https://www.cnblogs.com/xyh9039/p/17842159.html

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!

标签:词条,倒排,id,索引,文档,Elasticsearch,基本概念,ES
From: https://www.cnblogs.com/xyh9039/p/17842159.html

相关文章

  • CodeForces 合集第三弹
    这个合集主要是近期的CodeForces比赛题。1898.CodeforcesRound910(Div.2)https://codeforces.com/contest/1898A.MilicaandString很容易发现答案不超过\(1\),然后分类讨论当前B的个数然后选取一个前缀赋值即可。如果已经满足条件答案就是\(0\)。反正随便做做,时间......
  • ISSCC2024 Computing-In-Memory Session 趋势整理
    ISSCC2024Computing-In-MemorySession趋势整理今天上午ISSCC2024远东区推介会,主要关注了一下Computing-In-MemorySession。CIM今年被放在了Session34,会上主持人透露CIM方向一共投稿了50篇,最后录用了9篇,算下来录用率不到20%,不得不感慨一句相当之卷。言归正题,以下是今年CIMS......
  • JavaWeb--SqlSessionFactory工具类抽取
    代码优化 Stringresource="mybatis-config.xml";InputStreaminputStream=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);//2.2获取SqlSession对象SqlSessionsqlSession=......
  • RESTful服务与swagger
    一开始刚学springboot的时候restful服务+swagger一点都看不懂,现在知识学了一些,再回头看这些东西就简单很多了。自己跟视频做了一个零件项目,里面写了一些零零散散的模块,其中在视频的指导下初步使用了restful规范化。统一的接口风格确实减少了很多不必要的麻烦。swagger这个依赖......
  • request对象方法
    #登陆功能#form表单action三个参数写法request.method#获取当前请求方式全大写的字符串request.GET#获取url问好后面携带的参数 .get()列表最后一个元素.getlist()拿整个列表request.POST#获取post请求提交过来的普通键值对(不包含文件) .get()列表最后一个......
  • PostgreSQL - Transaction Isolation Level
     zzh@ZZHPC:~$dockerrun--namepostgres16-p5432:5432-ePOSTGRES_USER=root-ePOSTGRES_PASSWORD=aaa-dpostgres:alpine8e36b7bdc47572723a416c319b83f20b2eac7ef25adb3ac1a875e909f45ebdb6zzh@ZZHPC:~$dockerexec-itpostgres16createdb--username=root-......
  • drop_caches 的简单学习
    drop_caches的简单学习背景最近一段时间一直在学习内存相关的知识Linux系统里面的内存管理还是非常复杂的.我这边理解Linux从宏观层次的段页式内存管理到细节的buddy和slab以及大页内存分配以及pagecache和buffers的缓存等设置.最近因为遇到了CentOS6和CentOS7......
  • Transferability of the Chinese Eco-environmental Protection Measure
    LondonConventionandLondonProtocolThe LondonConvention and LondonProtocol establishtheglobalrulesandstandardsforpreventing,reducing,andcontrollingpollutionofthemarineenvironmentbydumping.The 1982UnitedNationsConventionontheLa......
  • TCP/IP & wireshark抓取QQ流量获取聊天图片
    TCP/IPTCP/IP体系的分层特点•TCP/IP开始仅仅是两个协议:TCP(TransferControlProtocol,传输控制协议)和IP(InternetProtocol,网际协议);后来,TCP/IP演变为一种体系结构,即TCP/IP参考模型。现在的TCP/IP已成为一个工业标准的协议集,它最早应用于ARPAnet。•与OSI参考模型不同,TCP/IP......
  • 请求扩展,蓝图 , flask-session,数据库连接池,wtforms ,flask-script,信号,flask-cache
    1请求扩展......