java基础巩固-宇宙第一AiYWM:为了维持生计,大数据之ElasticSearch【ElasticSearch的概念、关于文档、索引的命令】~整起

news2024/12/27 0:30:13

ElasticSearch

  • 一、ElasticSearch基本概念
    • 1.ElasticSearch是什么?从哪来、来干啥?
    • 2.ElasticSearch与Solr的对比与选型:
    • 3.ES核心概念及相关操作
    • 4.ELK:拆箱即用的技术,解压完成就能用
    • 5.IK分词器
    • 6.ElasticSearch与SpringBoot集成
  • 二、ElasticSearch实操
  • 巨人的肩膀


一、ElasticSearch基本概念

1.ElasticSearch是什么?从哪来、来干啥?

  • ElasticSearch
    • ElasticSearch是一个实时分布式搜索和分析引擎【开源的高扩展的分布式全文搜索引擎,可以近乎实时的存储、检索数据。但是ElasticSearch目的是通过简单的RESTful API来隐藏Lucene的复杂性。】。它让你以前所未有的速度处理大数据成为可能。它用于全文搜索、结构化搜索、分析以及将这三者混合使用
      在这里插入图片描述
    • SQL也可以做查询,比如like &yaochadexinxi%,进行模糊查询,但是如果数据量很大时,查询就很慢,原来通过索引可以优化查询速度,但是感觉依旧是治标不治本。所以就能用上ElasticSearch来进行搜索功能的实现
      在这里插入图片描述
      • 后期,咱们就可以把所有要查询的数据全部用爬虫爬出来,或者从数据库中拿出来放到ES中
    • Lucene和ElasticSearch
      • ElasticSearch是基于Lucene做了一些封装和增强。Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎
      • Lucene只是一套信息检索包,就是一个jar包,不包含啥搜索引擎,把jar导进来就能用。无论在开源还是专有领域, Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库想要使用Lucene,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更槽糕的是, Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单

2.ElasticSearch与Solr的对比与选型:

  • ElasticSearch
    • Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es.
  • Solr
    • Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene】。Solr提供了比Lucene更为丰富的查询语言【它对外提供类似于Web-service的API接口】,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
    • Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中
    • Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述Field及其内容的XML文档, Solr根据xml文档添加、删除、更新索引。Solr 搜索只需要发送HTTP GET请求,然后对Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能, Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况
      • 用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。
  • 如何选择ElasticSearch和Solr,或者说如何做技术选型
    • 当实时建立索引时,Solr 会产生io阻塞,查询性能较差,Elasticsearch具有明显的优势。
    • 随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
    • 转变我们的搜索基础设施后,可以得知从Solr到Elasticsearch搜索性能提高50多倍!
    • es基本是开箱即用(解压就可以用|) , 非常简单。Solr安装略微复杂一丢丢!
    • Solr 利用Zookeeper进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能
    • Solr 支持更多格式的数据,比如SON、XML、CSV ,而Elasticsearch仅支持json文件格式,够用了。
    • Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
    • Solr 查询快,但更新索引时慢(即 Solr 插入删除慢) , 用于电商等查询多的应用;ES建立索引快(即ES查询慢) ,即实时性查询快,用于facebook新浪等搜索
      • Solr是传统搜索应用的有力解决方案,但Elasticsearch 更适用于新兴的实时搜索应用
    • Solr比较成熟, 有一个更大,更成熟的用户开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

3.ES核心概念及相关操作

  • https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-general-purpose.html
  • ES是面向文档的
    在这里插入图片描述
    • 文档:就是咱们的一条条数据,一条条记录
      在这里插入图片描述
    • 类型
      在这里插入图片描述
      • 设置类型的方式:
        在这里插入图片描述
        在这里插入图片描述
      • 如果自己的文档没有指定类型,那么ES就会给我们默认配置字段类型
    • 索引:一个非常大的文档集合。就是DB
      • 索引存储了映射类型的字段和其他设置,然后索引被存储在各个分片上
      • 一个集群至少有一个节点,而一个节点就是一个elasricsearch进程 ,节点可以有多个索引默认的,如果你创建索引,那么索引将会由5个分片( primary shard ,又称主分片)构成的,每一个主分片会有一一个副本( replica shard ,又称复制分片)
        在这里插入图片描述
      • 倒排索引
        • 倒排索引的结构使得ES在不用扫描全部文档的情况下,就能知道哪些文档包含特定的关键字
        • elasticsearch使用的是一种称为倒排索引的结构采用Lucene倒排索引作为底层。 这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。其实就是,把所有的词条都统计出来,然后列个表,统计一下第一个词文档1有文档1有、第二个词文档1有文档2没有、第三个词文档1没有文档2有…,然后后面咱们搜,比如说由第二个词+第三个词组成的句子时,很明显不用所有文档都找一遍呗
      • 关于索引的操作
        在这里插入图片描述
        • 创建一个索引:用PUT命令创建,但是不仅仅可以用kibana发,用Postman这些都能发
          PUT /索引名/~类型名~/文档id
          {
              "name": "...",
              "age": ...
          }
          
          在这里插入图片描述
        • POST
          在这里插入图片描述
        • 用GET、POST、DELETE等命令进行的增删改查,可以用Kibana中看看结果,就可以看到每个词对应着自己的JSON那一坨,那一坨中有自己的score(相当于权重,就跟咱们在百度中查询词一样,权重高的一般最早被咱们查出来)、version(被修改的次数)…
          • 还可以设置正序倒序展示查询结果、分页查询…,其实跟MySQL差不多嘛
      • 高亮查询:
        在这里插入图片描述
        在这里插入图片描述
  • elasticsearch在后台把每个索引划分成多个分片,每片分片可以在集群中的不同服务器间迁移,一个ES个体就是一个集群
    在这里插入图片描述

4.ELK:拆箱即用的技术,解压完成就能用

  • ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack.
    在这里插入图片描述
    • Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ )收集的不同格式数据,然后经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等) .
    • Kibana:【官网: https://www.elastic.co/cn/kibana】【默认端口:5601】
      • Kibana可以将elasticsearch的数据通过友好的页面展示出来 ,提供实时分析的功能。市面上很多开发只要提到ELK能够一致说出它是一个日志分析架构技术栈总称,但实际上ELK不仅仅适用于日志分析.它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。并非唯一性。
      • Kibana是一个针对Elasticsearch的开源分析及可视化平台 ,用来搜索、查看交互存储在Elastidsearch索引中的数据。 使用Kibana ,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard )实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

5.IK分词器

  • 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,或者说会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如“我爱你”会被分为“我","爱”,“你” ,这显然是不符合要求的.所以我们需要安装中文分词器ik来解决这个问题。如果要使用中文,建议使用ik分词器!
  • IK提供了两个分词算法: ik_smart和ik_max _word ,其中ik_smart为最少切分, ik_max_word为最细粒度划分!
    • 有时候分词算法把我们想要的词给切开了,这样不行。所以咱们得自己给词典中加词,自己编写配置文件。就可以切出咱们自己想要的词了
      在这里插入图片描述
    • elasticsearch-plugin可以通过这个命令来查看加载进来的插件
  • 分词操作相关
    • term是直接通过倒排索引指定的词条进行精确查询的
    • match,会使用分词器解析(先分析文档,然后再通过分析的文档进行查询)
  • 去github上下载ik分词器,解压到es中的ik目录中,重启ES

6.ElasticSearch与SpringBoot集成

  • 常用网站:
    • https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html
    • https://www.elastic.co/guide/en/elasticsearch/client/index.html
  • 老步骤,
    • 跟Springbooot集成一般要导依赖
      在这里插入图片描述
    • 找ES对应的客户端对象
      在这里插入图片描述
    • 在IDEA中建项目,然后用这个客户端类中的方法或者说API操作
      在这里插入图片描述
      在这里插入图片描述
  • SpringBoot或者说Java中操作ES的命令
    • 索引的操作:
      • 创建索引
        在这里插入图片描述
      • 获取索引:判断索引是否存在
        在这里插入图片描述
      • 删除索引
        在这里插入图片描述
    • 文档的操作:
      • 创建文档,添加文档【原理其实就是,咱们把对象转化为JSON放到ES中,就可以利用ES的特性操作这些数据了
        在这里插入图片描述
      • 获取文档
        • 获取文档,判断是否存在get /index/doc/1
          在这里插入图片描述
        • 获取文档信息
          在这里插入图片描述
      • 更新文档信息
        在这里插入图片描述
      • 删除文档
        在这里插入图片描述
      • 大批量插入数据
        在这里插入图片描述
        在这里插入图片描述
      • 查询
        在这里插入图片描述
        • 设置高亮等特殊玩法
          在这里插入图片描述
    • 一个例子的部分思路和代码:从数据库中、MQ中获取数据、爬数据
      • jsoup,解析网页,导入依赖
        在这里插入图片描述
      • 获取请求返回的页面信息,然后把从数据库/Q等获取到的数据进行解析,解析数据放到ES索引中,获取这些数据实现搜索功能
        在这里插入图片描述
        在这里插入图片描述
      • 高亮搜索
        在这里插入图片描述
        在这里插入图片描述

二、ElasticSearch实操

  • ElasticSearch实操步骤:
    • https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-general-purpose.html
    • 安装,就是解压咱们从官网等地下载回来的ES安装包,然后找里面的执行文件执行,相当于服务器跑起来,客户端这边去访问呗
      • https://www.elastic.co/cn/downloads/elasticsearch;
        在这里插入图片描述
      • https://www.elastic.co/guide/en/elastic-stack/current/index.html
        在这里插入图片描述
    • ES解压目录:
      在这里插入图片描述
    • 启动(window下双击启动bin目录下的elasticsearch.bat文件),访问9200
      在这里插入图片描述
      • 访问的测试界面
        在这里插入图片描述
      • ES中的head算是一个数据展示工具【ES中建索引跟之前DB中建数据库是一个味】
        在这里插入图片描述

巨人的肩膀

ES官方文档
https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-general-purpose.html
狂神说Java的课,挺好,推荐看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节跳动青训营--前端day6

文章目录前言一、React的历史和应用二、React的设计思路1. ui编程痛点 & 对React的期望2. 组件化3.状态归属问题4. 生命周期三、React(hooks)1.Virtual DOM(虚拟 DOM):2. diff算法四、React状态管理库五、应用级框架科普前言 仅以此文章…

spark 内存管理机制与相关参数调优

spark 内存管理 文章目录spark 内存管理spark 1.6 内存管理机制spark 2.0 内存管理机制spark 3.3.1 官方文档spark 内存相关参数调优spark 1.6 内存管理机制 https://0x0fff.com/spark-memory-management 统一内存管理 Spark 1.6 之后引入的统一内存管理机制,与静…

SpringbootAdmin:轻量级的Springboot监控组件,用过的都说好

简介 Springboot Admin是一个管理和监控Springboot项目的组件,分为服务端和客户端,两端通过http进行通信。由于其轻量级的特性,所以特别适合中小项目使用。 其效果图如下: 服务端配置 1,引入Springboot admin和Spri…

3.5 异常

1.概述 异常是一些用来封装错误信息的对象 它由异常的类型、提示信息、报错的行号提示三部分组成 2.异常的继承结构 3.异常的处理方式 当程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出 当一个方法抛出异常,调用位置可以不做处理继续向上抛出,也可以捕获处理异常 大…

简单使用OpenGauss数据库

1 参考网站 # OpenGauss官网 https://opengauss.org/zh/2 Docker安装OpenGauss 下载OpenGauss docker pull enmotech/opengauss:3.0.0安装OpenGauss 容器参数说明: GS_PASSWORD:必须设置该参数,该参数设置了openGauss数据库的超级用户omm…

LeetCode 刷题系列 -- 1110. 删点成林

给出二叉树的根节点 root,树上每个节点都有一个不同的值。如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。返回森林中的每棵树。你可以按任意顺序组织答案。示…

多域(跨域)计算「起势」,智能汽车赛道迎来新拐点

多域(跨域)计算平台正在成为新一轮市场争夺战的焦点。 就在今年CES展上,采埃孚推出多域功能版本的ProAI高性能计算平台,可以在不同的单板上支持基于域的ADAS、信息娱乐以及车身控制功能,并适配不同供应商的系统芯片以及…

前后端分离的陷阱

不管你设计的系统架构是怎么样,最后都是你的组织内的沟通结构胜出。这个观点一直在组织内不断地被证明,但也不断地被忽略。 前后端分离的利与弊 近几年,随着微服务架构风格的引入、前后端生态的快速发展、多端产品化的出现,前后…

vue前端框架应用案例(三)实现简单的echarts柱状图表

目录前端效果展示项目架构Seller.vueSellerPage.vueindex.jsApp.vuemain.jsindex.html后端源程序接口测试本博客内容参考黑马课程,详细信息请参考以下网址 Bilibili官方黑马课程:【echarts数据可视化项目】 前端 效果展示 项目架构 Seller.vue 该部分…

点云双边滤波

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、局部的特点。双边滤波器的好处是可以做边缘保…

rootlogger 和 logger的关系

你是不是经常看到日志框架&#xff08;log4j、log4j2、logback等&#xff09;配置文件中有类似配置&#xff0c;但是始终搞不清楚啥意思&#xff1f;<root level"INFO"><appender-ref ref"CONSOLE" /><appender-ref ref"FILE" /&…

3.9.1Cache的基本概念和原理

文章目录一、引子二、工作原理三、局部性原理&#xff08;1&#xff09;空间局部性&#xff08;2&#xff09;时间局部性&#xff08;3&#xff09;总结四、性能分析&#xff08;1&#xff09;方案一&#xff08;2&#xff09;方案二&#xff08;3&#xff09;考题五、块&#…

LeetCode 212. 单词搜索 II 【字典树+回溯】

题目链接&#xff1a;https://leetcode.cn/problems/word-search-ii/ 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&am…

VC+VB开发CAD重生记:CADEditorX 15.X Crack

CADEditorX是一个 ActiveX 组件&#xff0c;用于在任何支持 ActiveX 和 COM 技术的开发环境&#xff08;例如 C#、Visual C、Delphi、VB、JavaScript 等&#xff09;中向网页或正在开发的应用程序添加 CAD 功能。它可以查看、编辑、转换、打印和测量DWG、DXF、SVG、HPGL、PDF、…

python设计模式-构建器(Builder)设计模式,原型设计模式

构建器(Builder)设计模式构建器(Builder)模式是一种独特的设计模式&#xff0c;它有助于使用简单对象构建复杂对象并使用算法。 这种设计模式属于创建型模式。 在这种设计模式中&#xff0c;构建器类逐步构建最终对象。 该构建器独立于其他对象。构建器(Builder)模式的优点它提…

Anolis Os linux U盘 安装

Anolis OS系统8.4安装|U盘安装Anolis OS(龙蜥)8.4系统_白云一键重装系统 (baiyunxitong.com)https://www.baiyunxitong.com/jiaocheng/7092.html#:~:textAnolis%20OS%E7%B3%BB%E7%BB%9F8.4%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4%EF%BC%9A%20%28%E5%88%B6%E4%BD%9CU%E7%9B%98%E5…

深度解读 python 实现 dbscan算法

DBScan (密度基于空间聚类) 是一种聚类算法&#xff0c;它通过找到图像中的密度峰值来对数据进行聚类。 文章目录DBScan 算法解释说明DBScan 算法的应用场景Python 实现的 DBScan 算法Python 实现 dbscan 高级算法再演示一种 python 实现 dbscan 算法的代码总结DBScan 算法解释…

共享模型之内存(二)

1.有序性 1>.JVM会在不影响正确性的前提下调整语句的执行顺序,思考下面一段代码: static int i; static int j; // 在某个线程内执行如下赋值操作 i ...; j ...;可以看到,至于是先执行i还是先执行j,对最终的结果不会产生影响.所以,上面代码真正执行时,既可以是: i ..…

mysql:日志,redo,undo,为什么使用日志?

mysql日志 mysql事务的隔离性是通过锁来实现的 而原子性&#xff0c;一致性&#xff0c;持久性就是通过日志来实现的。 REDO LOG 称为 重做日志 &#xff0c;提供再写入操作&#xff0c;恢复提交事务修改的页操作&#xff0c;用来保证事务的持 久性。 UNDO LOG 称为 回滚日志 …

凑个小热闹:python采集《狂飙》评论

前言 昨晚&#xff0c;2023年首部爆款剧集《狂飙》迎来大结局&#xff0c;一度冲上热搜第一 “是非面前稍不留神&#xff0c;就会步入万丈深渊&#xff0c;唯有坚守信仰&#xff0c;才能守得初心” 面对这么多广大网友的讨论&#xff0c;我也来凑上一个热闹 用python采集一下…