java基础巩固-宇宙第一AiYWM:为了维持生计,大数据之ElasticSearch【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的课,挺好,推荐看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值