最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 建站服务器 >
这篇文章详细解释什么是Elasticsearch 基本内容
CSDN发表于 2020-09-02 18:30 次浏览

 

elasticsearch是一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎,能很方便地使大量数据具有搜索、分析和探索的能力。其基于RESTful web接口,是用Java开发的,并作为Apache许可条款下的开放源码发布,是企业级搜索引擎。
Elasticsearch

1.全文检索

1.1 为什么要使用全文检索

​ 在一个项目中,用户访问首页一般都会直接搜索自己想要的东西。

​ 一般来说,商品的分类的数量相当多,如果想要正确的显示出用户想要的商品,那么一个强大的搜索系统是不可或缺的。

​ 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

​ 这里使用传统的数据库不够用,所以我们会使用全文搜索。

​ 常见的全文检索技术有:lucene solr elasticsearch 等。

1.2 理解索引结构

倒排索引(Inverted Index)

该索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。Elasticsearch能够实现快速、高效的搜索功能,正是基于倒排索引原理。

 

在这里插入图片描述

倒排索引:根据属性值来确定记录该属性值的各记录的位置。

由于不是根据记录来确定属性值,而是由属性值来确定几率的位置,因而成为倒排索引。

1.3ES核心概念

节点 & 集群(Node & Cluster)

Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例。单个Elasticsearch实例称为一个节点(Node),一组节点构成一个集群(Cluster)。

Shard:分片

​ 当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
​ 当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

Replia:副本

​ 为提高查询吞吐量或实现高可用性,可以使用分片副本。
​ 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
​ 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

索引(Index)

Elasticsearch 数据管理的顶层单位就叫做 Index(索引),相当于关系型数据库里的数据库的概念。另外,每个Index的名字必须是小写。

文档(Document)

Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

类型(Type)

Document 可以分组,比如employee这个 Index 里面,可以按部门分组,也可以按职级分组。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似关系型数据库中的数据表。
 不同的 Type 应该有相似的结构(Schema),性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

文档元数据(Document metadata)

文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。

字段(Fields)

每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
 在 Elasticsearch 中,文档(Document)归属于一种类型(Type),而这些类型存在于索引(Index)中,下图展示了Elasticsearch与传统关系型数据库的类比:

2.Elasticsearch

2.1 Elasticsearch简介

​ ElasticSearch是一个搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,使用java语言开发。

优点:

  • 可以作为一个大型分布式集群技术,处理大数据,服务大公司,也可以运行在单机上。
  • 将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES
  • 开箱即用,部署简单
  • 全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理。

下边是Elasticsearch与mysql数据库逻辑结构概念的对比

Elasticsearch mysql
索引 index 数据库 database
类型 type 表 table
文档 document 行 row

在这里插入图片描述

(1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
(2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
(3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
(4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
(5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

2.2 安装与启动

​ 下载以后直接在bin目录下点击 .bat 启动,在浏览器上输入Localhost://9200

3.使用Postman操作索引库

​ 实际中基本不会使用postman进行操作索引库,所以这里我们不做演示

4.映射与数据类型

4.1 映射

​ 映射相当于数据表的表结构。在ElasticSearch中的映射用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。

​ 映射可以分为动态映射和静态映射。

​ 动态映射:在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据,在ElasticSearch中不需要实现定义映射,文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

​ 静态映射:在ElasticSearch中也可以实现定义好映射,包含文档的各个字段以及类型等,这种方式称之为静态映射。

4.2 常用类型

4.2.1 字符串类型

类型 描述
text 当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。
keyword keyword类型适用于索引结构化的字段,比如Email地址、之际名、状态码和标签。如果字段需要进行过滤、排序、聚合。keyword类型的字段只能通过精确值搜索到。

4.2.2 整数类型

类型 取值范围
byte -128-127
short -32768-32767
integer -2的31次方 2的31次方-1
long -2的63次方 2的63次方-1

4.2.3 浮点类型

4.2.4 date类型

4.2.5 boolean类型

4.2.6 binary类型

4.2.7 array类型

4.2.8 object 类型

5.IK分词器

用以将词汇分词的插件,可以直接放入到elasticsearch的插件中使用

6.Kibana

​ 是一个开源的分析和可视化平台,旨在与Elasticsearch 合作,提供了搜索、查看与存储在Elasticserach索引中的数据进行交互的功能。开发者或者运维人员可以轻松第执行高级数据分析,并在各种图标、表格和地图中可视化数据。

  • 解压你下载的文件
  • 如果Kibana远程连接ElasticSearch,可以修改config\kibana.yml
  • 执行bin\kibana.bat
  • 打开浏览器,使用http://lcoalhost:5601 访问Kibana

7.JavaRest高级客户端入门

7.1 JavaRest高级客户端简介

elasticSearch存在三种java客户端

  • Transport
  • Java Low Level Rest Clint 低级rest客户端
  • Java High Level Rest Client 高级rest客户端

三种客户端的区别:

  • Transport没有使用RESTful分割接口,而是使用二进制的方式传输数据
  • ES官方推出了Java Low Level REST Client ,它支持RESTful,但是缺点就是TranspClient的使用者把代码迁移到了Low Level REST Client 的工作量比较大
  • ES官方推出了Java High Level REST Client ,它是基于 Java Low Level REST Client的封装,并且API接收参数0和返回值也是和TransportClient是一样的,使得代码迁移变得容易并且支持了RESTful风格,兼容了这两种客户端的优点。强烈使用这个。

8.ES优势

  • 分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到

  • 实时分析的分布式搜索引擎

    分布式:索引分拆称多个分片,每个分片可有0个或者多个副本。集群中的每个数据节点都可负载一个或多个分片,并且协调处理各种操作;

    负载再平衡和路由再大多数情况下自动完成

  • 可以扩展到上百台服务器,出差PB级别的结构化或非结构化数据,也可以运行在单台pc上

  • 支持插件机制,粉刺插件、同步插件、可视化插件等。

或者说:

1).实时搜索(高性能)
2).分布式(高可用)(解决单台机器不能存储大量的数据,无法进行有效的检索)
3).可伸缩(方便扩容)
4).分词检索
5).以搜索关键字添加高亮信息
6).降低关系型数据的压力.

  • 可以扩展到上百台服务器,出差PB级别的结构化或非结构化数据,也可以运行在单台pc上
  • 支持插件机制,粉刺插件、同步插件、可视化插件等。

或者说:

1).实时搜索(高性能)
2).分布式(高可用)(解决单台机器不能存储大量的数据,无法进行有效的检索)
3).可伸缩(方便扩容)
4).分词检索
5).以搜索关键字添加高亮信息
6).降低关系型数据的压力.

标签:elasticsearc
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐