推广 热搜: 公司  快速  中国  上海  未来    企业  政策  教师  系统 

Elasticsearch硬核入门教程(2022最全)

   日期:2024-10-31     作者:caijiyuan    caijiyuan   评论:0    移动:http://kaire.xrbh.cn/news/9542.html
核心提示:The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何

The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

Elasticsearch硬核入门教程(2022最全)

Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。

一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对SQL的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。

基于以上原因可以分析得出,在一些生产环境中,使用常规的搜索方式,性能是非常差的

  • 搜索的数据对象是大量的非结构化的文本数据。

  • 文件记录量达到数十万或数百万个甚至更多。

  • 支持大量基于交互式文本的查询。

  • 需求非常灵活的全文搜索查询。

  • 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足。

  • 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。

为了解决结构化数据搜索和非结构化数据搜索性能问题,我们就需要专业,健壮,强大的全文搜索引擎,这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

Lucene是Apache软件基金会Jakarta项目组的一个子项目,提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。但Lucene只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来进行应用。

目前市面上流行的搜索引擎软件,主流的就两款:Elasticsearch和Solr,这两款都是基于Lucene搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似。

Elasticsearch和Solr都是开源搜索引擎,那么我们在使用时该如何选择呢

  • Google 搜索趋势结果表明,与 Solr 相比, Elasticsearch 具有很大的吸引力,但这并不意味着 Apache Solr 已经死亡。虽然有些人可能不这么认为,但 Solr 仍然是最受欢迎的搜索引擎之一,拥有强大的社区和开源支持。

  • 与 Solr 相比, Elasticsearch 易于安装且非常轻巧。此外,你可以在几分钟内安装并运行Elasticsearch 。但是,如果 Elasticsearch 管理不当,这种易于部署和使用可能会成为一个问题。基于 JSON 的配置很简单,但如果要为文件中的每个配置指定注释,那么它不适合您。总的来说,如果你的应用使用 的是 JSON ,那么 Elasticsearch 是一个更好的选择。否则,请使用 Solr ,因为它的 schema.xml 和 solrconfig.xml 都有很好的文档记录。

  • Solr 拥有更大,更成熟的用户,开发者和贡献者社区。 ES 虽拥有的规模较小但活跃的用户社区以及不断增长的贡献者社区。Solr贡献者和提交者来自许多不同的组织,而 Elasticsearch 提交者来自单个公司。

  • Solr 更成熟,但 ES 增长迅速,更稳定。

  • Solr 是一个非常有据可查的产品,具有清晰的示例和 API 用例场景。 Elasticsearch 的文档组织良好,但它缺乏好的示例和清晰的配置说明。

那么,到底是Solr 还是 Elasticsearch

  • 由于易于使用, Elasticsearch 在新开发者中更受欢迎。一个下载和一个命令就可以启动一切。

  • 如果除了搜索文本之外还需要它来处理分析查询, Elasticsearch 是更好的选择

  • 如果需要分布式索引,则需要选择 Elasticsearch 。对于需要良好可伸缩性和 以及 性能分布式环境 Elasticsearch 是更好的选择。

  • Elasticsearch 在开源日志管理用例中占据主导地位,许多组织在 Elasticsearch 中索引它们的日志以使其可搜索。

  • 如果你喜欢监控和指标,那么请使用Elasticsearch ,因为相对于Solr,Elasticsearch 暴露了更多的关键指标

1、下载

Elasticsearch 的官方地址: https://www.elastic.co/cn/

下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

Elasticsearch 分为 Linux 和 WindowWindows版本,基于我们主要学习的是 ElasticElasticsearch 的 Java客户端的使用,所以 课程 中使用的是安装较为简便的 WindowWindows版本 。

2、安装

Windows版的 ElasticElasticsearch 的安装很简单,解压即安装完毕,解压后的 ElasticElasticsearch 的 目录结构如下

目录含义bin可执行脚本目录config配置目录jdk内置JDK 目录lib类库logs日志目录modules模块目录plugins插件目录

解压后,进入bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

注意

  •  端口为 Elastic s earch 集群间组件的通信端口

  •  端口为浏览器访问的 http协议 RESTful 端口。

打开浏览器(推荐使用谷歌浏览器,输入地址:http://localhost:9200 ,测试结果

3、问题解决

  • ElasticSearch 是使用 java 开发的,且 7.13.2版本的 ES 需要 JDK 版本 1.8 以上,默认安装包带有 jdk 环境,如果系统配置 JAVA_HOME ,那么使用系统默认的 JDK ,如果没有配置使用自带的 JDK ,一般建议使用系统配置的 JDK 。

  • 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改config/jvm.options 配置文件

    设置 JVM 初始内存为 1G 。此值可以设置与 Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存

    Xms represents the initial size of total heap space

    设置 JVM 最大可用内存为 1G

    Xmx represents the maximum size of total heap space

    Xms1g Xmx1g

1、RESTful

REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful 。 Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI(Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET 、 PUT 、 POST 和DELETE 。

在REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET 、 POST 、PUT 、 DELETE ,还可能包括 HEAD 和 OPTIONS 。简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径, 以及对资源进行的操作 增删改查 。

2、Postman安装

如果直接通过浏览器向Elasticsearch 服务器发请求,那么需要在发送的请求中包含HTTP 标准的方法,而 HTTP 的大部分特性且仅支持 GET 和 POST 方法。所以为了能方便地进行客户端的访问,可以使用 Postman 软件  Postman是一款强大 的 网页调试工具,提供功能强大的 Web API 和 HTTP 请求调试。软件功能强大,界面简洁明晰、操作方便快捷,设计得很人性化。 Postman 中文版能够发送任何类型的 HTTP 请求 (GET, POST, PUT..) PUT..),不仅能够表单提交,且可以附带任意类型请求体。

Postman官网: https://www.getpostman.com Postman下载 https://www.getpostman.com/apps

3、数据格式

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elastic s earch 里 存储 文档 数据和关系型数据库 MySQL 存储数据的概念进行一个类比

ES里的 Index 可以看做一个库,而 Types 相当于表, documents 则相当于表的行。这里Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type Elasticsearch 7.X 中 , Type 的概念已经被删除了。

4、HTTP操作

1、索引操作

1、创建索引

对比关系型数据库,创建索引就等同于创建数据库

在Postman 中,向 ES 服务器发 PUT 请求 http://127.0.0.1:9200/start

请求后,服务器返回响应

如果重复添加索引,会返回错误信息

2、查看索引

在Postman 中,向 ES 服务器发 GET 请求 http://127.0.0.1:9200/_cat/indices?v

这里请求路径中的 _cat 表示查看的意思, indices 表示索引,所以整体含义就是查看当前 ES服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉,服务器响应结果如下

3、查看单个索引

在Postman 中,向 ES 服务器发 GET 请求 http://127.0.0.1:9200/start

查看索引向ES 服务器发送的请求路径和创建索引是一致的。但是 HTTP 方法不一致。这里可以体会一下 RESTful 的意义,请求后,服务器响应结果如下

4、删除索引

在Postman 中,向 ES 服务器发 DELETE 请求 http://127.0.0.1:9200/start

重新访问索引时,服务器返回响应:索引不存在

2、文档操作

1、创建文档

索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式

在Postman 中,向 ES 服务器发 POST 请求 http://127.0.0.1:9200/start/doc

此处发送请求的方式必须为POST ,不能是 PUT ,否则会发生错误

上面的数据创建后,由于没有指定数据唯一性标识(ID ,默认情况下 ES 服务器会随机生成一个 。

如果想要自定义唯一性标识,需要在创建时指定http://127.0.0.1:9200/start/doc/1 or http://127.0.0.1:9200/start/_doc/1

此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为PUT

2、查看文档

查看文档时,需要指明文档的唯一性标识,类似于MySQL 中数据的主键查询

在Postman 中,向 ES 服务器发 GET 请求 http://127.0.0.1:9200/start/_doc/1

查询成功后,服务器响应结果

3、修改文档

和新增文档一样,输入相同的URL 地址请求,如果请求体变化,会将原有的数据内容覆盖 在Postman 中,向 ES 服 务器发 POST 请求 http://127.0.0.1:9200/start/_doc/1

请求体内容为:

4、修改字段

修改数据时,也可以只修改某一给条数据的局部信息

在Postman 中,向 ES 服务器发 POST 请求 http://127.0.0.1:9200/start/_update/1

根据唯一性标识,查询文档数据,文档数据已经更新

5、删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。

在Postman 中,向 ES 服务器发 DELETE 请求 http://127.0.0.1:9200/start/_doc/1

删除成功,服务器响应结果

version:对数据的操作,都会更新版本

删除后再查询当前文档信息

如果删除一个并不存在的文档

6、条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除

首先分别增加多条数据

向ES 服务器发 POST 请求 http://127.0.0.1:9200/start/_delete_by_query

删除成功后,服务器响应结果

3、映射操作

有了索引库,等于有了数据库中的database 。

接下来就需要建索引库(index)中的映射了,类似于数据库 (database)中的表结构 (table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射 (mapping)。

1、创建映射

在Postman 中,向 ES 服务器发 PUT 请求http://127.0.0.1:9200/user/_mapping

请求内容为

服务器的响应

映射数据说明

  • 字段名:任意填写,下面指定许多属性,例如: title 、 subtitle 、 images 、 price

  • type :类型 Elasticsearch 中支持的数据类型非常丰富,说几个关键的

    • 基本数据类型:long 、 integer 、 short 、 byte 、 double 、 float 、 half_float

    • 浮点数的高精度类型:scaled_float

    • text:可分词

    • keyword:不可分词,数据会作为完整字段进行匹配

    • String 类型,又分两种

    • Numerical :数值类型,分两类

    • Date :日期类型

    • Array :数组类型

    • Object :对象

  • index :是否索引,默认为 true ,也就是说你不进行任何配置,所有字段都会被索引。

    • true:字段会被索引,则可以用来进行搜索

    • false:字段不会被索引,不能用来搜索

  • store :是否将数据进行独立存储,默认为 false

    原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从 _source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从 _source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

  • analyzer :分词器,这里的 ik_max_word 即使用 ik 分词器

2、查看映射

在Postman 中,向 ES 服务器发 GET 请求http://127.0.0.1:9200/user/_mapping

3、索引映射关联

在Postman 中,向 ES 服务器发 PUT 请求 http://127.0.0.1:9200/user1

  1. 创建maven项目

  2. 导入相关依赖

     
  3. 创建测试

     

    没有任何输出或报错信息即是成功

1、创建索引

ES服务器正常启动后,可以通过 Java API 客户端对象对 ES 索引进行操作

2、查看索引

3、删除索引

创建数据模型

1、创建数据,添加到文档

2、修改文档

3、查询文档

4、删除文档

5、批量操作

1、批量新增

查询文档

  • http://127.0.0.1:9200/user/_doc/1005

  • http://127.0.0.1:9200/user/_doc/1004

  • http://127.0.0.1:9200/user/_doc/1006

2、批量删除

1、请求体查询

1、查询所有索引数据

2、term查询

3、分页查询

4、数据排序

5、过滤字段

6、Bool查询

7、范围查询

8、模糊查询

1、最大年龄

2、分组查询

本文地址:http://syank.xrbh.cn/news/9542.html    迅博思语资讯 http://syank.xrbh.cn/ , 查看更多
 
标签: 入门教程 硬核
 
更多>同类资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号