ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)&使用 Postman连接ES进行测、ES&RestAPI(操作索引CRUD&操作文档CRUD)、练习

本文介绍了Elasticsearch的核心概念,包括倒排索引、DSL命令和RESTAPI,展示了如何创建、查询、修改和删除索引库与文档。同时,文章对比了Elasticsearch与MySQL在数据检索上的差异,并提供了Java代码示例来操作Elasticsearch的文档数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 要理解倒排索引
  • 要能够使用DSL命令操作索引库
  • 要能够使用DSL命令操作文档
  • 要能够使用RestAPI操作索引库、文档

 

一、ES简介

  • 理解倒排索引的概念和作用
  • 理解es和MySql的区别和使用场景

1. 数据库查询的问题

假如我们有一个电商系统,需要查询商品。以前一直是直接从MySql数据库里用SQL语句模糊查询,例如:select * from tb_product where pname like '%华为手机%'

但是这种查询检索数据的方式,有很大的问题:

  • 查询性能很低

    MySql可以通过索引的方式来提高查询的效率,但是像上边这种模糊查询以%开头,会导致索引失效,实际上执行的是全表扫描,效率非常低。

  • 查询结果不准确

    我们应当查询到与“手机”、“华为”等词条相关的所有商品,而不是 只包含“华为手机”的商品

 而这些问题,都可以使用ElasticSearch轻易的解决掉:把数据存储到ElasticSearch里,由ElasticSearch提供高效的文档检索能力

2. ES简介

2.1 ElasticSearch简介

ElasticSearch,简称ES。

ES是:一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容

     如:百度搜索、京东商品搜索、打车软件中搜附近的车辆等等。

ES结合kibana、Logstash、Beats(也就是ELK技术栈,Elastic Stack),

被广泛的用户在日志数据分析、实时监控等领域。

ES是:ELK的核心,负责存储、搜索、分析数据

2.2 ElasticSearch发展

  • Doug Cutting于1999年研发了一个Java语言的搜索引擎类库(函数库):Lucene,目前已是Apache的顶级项目。

    官网地址:Apache Lucene - Welcome to Apache Lucene

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

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

  • 2004年Shay Banon基于Lucene开发了Compass,随后于2010年重写了Compass,取名为ElasticSearch。

    官网地址:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic

    相比于Lucene,ElasticSearch具备更多优势:

    1. 支持分布式,可水平扩展

    2. 提供RESTful接口,任何编程语言都可以使用。

  • 到目前为止,ElasticSearch已经成为主流的搜索引擎

3. 倒排索引

3.0 索引介绍

索引:索引是一种数组结构,可以帮助我们快速查找数据提升查询的速度。类似于字典的目录

  • 如果没有目录:想要查找一项数据,就需要全表扫描,速度非常慢

  • 可以构造目录:

  • 根据拼音构造了目录:想要查找一个字,就可以根据拼音,从拼音目录里快速找到这个字在哪一页

直接到这一页,获取这个字的详细信息了

  • 根据笔画构造了目录:想要查找一个字,就可以根据笔画,从笔画目录里快速找到这个字在哪一页

直接到这一页,获取这个字的详细信息了

  • 根据偏旁构造了目录:想要查找一个字,就可以根据偏旁,从偏旁目录里快速找到这个字在哪一页

直接到这一页,获取这个字的详细信息了

在数据库里:

  • 如果没有索引:想要查找一条数据,就需要全表扫描,速度非常慢

  • 可以构造索引:

  • 根据主键id构造索引:想要查找id为1的数据,直接去索引里找到id对应的数据在磁盘上哪个地址

直接跳转到这个地址,获取这条数据的详细信息

  • 根据用户名构造索引:想要查找“张三”数据,直接去用户名索引里找到数据对应的地址

直接到这个地址,获取这条数据的详细信息

索引的特点:

  • 可以极大的提升查询速度

  • 但是会影响增删改的速度

3.1 正向索引

说明

传统RDBMS(例如MySql)采用的是正向索引

即:根据表的主键字段构建索引,在查询时要扫描到每个索引值对应的数据,

       从中筛选出符合查询条件的记录。

这样的检索方式构建索引简单,但是不适合复杂的文档检索。

复杂的文档检索时,索引会失效,变成全表扫描

示例

以商品表搜索为例,商品表tb_product如下:

id title price
1 小米手机 3499
2 华为手机 4999
3 华为小米手机充电器 49
4 小米手环 79

要搜索包含“手机”的商品,执行SQL:select * from tb_product where title like '%手机%'

MySql会扫描所有的数据记录逐条判断 “title”的值是否包含“手机”,直到全表扫描,过滤出所有符合要求的结果

3.2 倒排索引

说明

ElasticSearch采用的是倒排索引

即:以关键字构建索引保存每个关键字所在的记录

需要查询时,根据词条匹配查询条件直接找到关联的记录

倒排索引建立和维护都比较复杂,但是在查询时可以和查询关键字关联的所有结果并快速响应。

示例

以商品表搜索为例,商品表略

构建倒排索引

词条(term) 文档id
小米 1, 3, 4
手机 1, 2
华为 2, 3
充电器 3
手环 4

文档Document每条数据就是一个文档

词条term按照语义分成的词语

当搜索“华为手机”时:

  1. 搜索条件进行分词,得到两个词条“华为”, “手机”

  2. 根据词条去倒排索引里查询相关的文档id,得到:

    • “华为”:2, 3

    • “手机”:1, 2

  3. 根据文档id,找到对应的文档数据,得到:id为1、2、3的文档

4. ES和MySql

使用方式 

传统的RDBMS和ElasticSearch各有所长:

RDBMS是 Relational Database Management System 的缩写,

中文译为“关系数据库管理系统

它是 SQL 语言以及所有现代数据库系统(例如 SQL Server、DB2、Oracle、MySQL 和 Microsoft Access)的基础。
关系数据库管理系统(RDBMS)是一种基于 E. F. Codd 发明的关系模型的数据库管理系统(DBMS)。

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

  • ES:擅长海量数据的搜索、分析、计算

在实际开发中,通常是结合使用

  • MySQL负责写操作

  • ES负责搜索操作

5. 小结

正向索引:先找到数据,再判断数据是否符合条件。需要全表扫描,速度慢
倒排索引:根据词条去倒排索引里找文档id,直接找到数据。不需要全表扫描,速度极快
    1. ES会对数据表里的某些字段构建倒排索引
        对这个字段的值,进行拆词(分词),得到词条
        构建出来 每个词条 与 文档id的对应关系
        这个对应关系,就是倒排索引
    2. 在搜索数据时,提供搜索词
        ES会对搜索词进行拆词(分词)得到词条
        去倒排索引里,直接找到关联的文档id,获取id对应的数据
ES和MySQL的使用方式
    有查询操作,找ES
    有增删改操作,找MySQL
    然后MySQL和ES之间要实现数据同步

二、安装ES

掌握

  • 安装es7.4,安装kibana
  • 安装ik分词器
  • 理解ik分词器的分类和作用

1. 安装ES

目前我们安装的是ES的7.4.0版本,需要JDK8及以上

1.1 解压

把《elasticsearch-7.4.0-windows-x86_64.zip》解压到一个不含中文、空格、特殊字符的目录里

1.2 配置

1) 配置存储路径

打开config/elasticsearch.yml文件,设置索引数据的存储路径,和日志的存储路径

2) 配置虚拟机参数

进入es的bin目录,直接双击 elasticsearch.bat即可启动

es服务要占用两个端口:

  • 9200:rest访问接口,我们稍后要通过这个端口连接es、操作es

  • 9300:用于es集群间通信的接口

1.3 验证

在浏览器上直接输入地址 http://localhost:9200/, 如果看到以下界面,说明es启动成功了

2. 安装Kibana

Kibana是一个ES索引库数据统计工具,可以利用ES的聚合功能,生成各种图表,如柱形图,线状图,饼图等。

而且还提供了操作ES索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习ES的语法。

2.1 安装nodeJs

Kibana依赖于nodeJs,需要在windows下先安装Node.js,然后才能安装Kibana。

双击nodejs的安装包,按照提示一步步安装即可

安装成功后,打开cmd 输入:node -v,如果能看到版本号,说明node安装成功

 

2.2 安装Kibana

1) 解压

把《kibana-7.4.0-windows-x86_64.zip》解压到不含中文、空格、特殊字符的目录里

2) 配置

修改kibana的config/kibana.yml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值