分布式全文搜索引擎ES详解《Java-2021面试谈资系列》

本文详细介绍了ElasticSearch(ES)的概述、与Solr和Lucene的对比、安装步骤,以及ES的核心概念,包括文档、类型、索引和倒排索引。通过实例展示了ES的安装、Kibana的使用,以及Rest风格的ES操作,如索引管理、文档操作和查询总结。ES是一个分布式、RESTful风格的搜索和数据分析引擎,基于Lucene,提供全文搜索、结构化搜索和分析功能。
摘要由CSDN通过智能技术生成

ElasticSearch

为啥要学ElasticSearch?---->搜索引擎

SQL:like查询,模糊搜索,那如果大数据量呢?—>编写索引—>分布式全文搜索引擎(百度、github、淘宝电商)

一、ES概述

ElasticSearch是基于Lucene做了一些封装和增强(十分简单!!!)

Elasticsearch 是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

Elasticsearch 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

ELK:Elasticsearch、Logstash、Kibana

特点

  • 全文搜索
  • 结构化搜索
  • 分析

二、对比ES

1.Solr简介

采用Java开发,基于Luncene的全文搜索服务器,同时对其进行了扩展(扩展了面向抽象编程的地方,比如分词器,查询),提供了比Lucene更为丰富的查询语言(比如,过滤器),同时实现了可配置(跟hadoop整合,之前索引结构写在代码中,现在提前定义好)、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

服务器 占用一个端口来提供服务 比如 可以加缓存

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G SolrJ操作提出查找请求(也可以提交json格式),并得到XML格式的返回结果。

2.Lucene简介

Lucene是apache软件基金会的一个项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。

3.ES和Solr对比

ElasticSearch优点:

  • Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
  • Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
  • 处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
  • Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
  • 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作

ElasticSearch缺点:

  • 只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)
  • 还不够自动(不适合当前新的Index Warmup API)

==============================================================

Solr优点:

  • Solr有一个更大、更成熟的用户、开发和贡献者社区。
  • 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
  • Solr比较成熟、稳定。
  • 不考虑建索引的同时进行搜索,速度更快。

Solr缺点:

  • 建立索引时,搜索效率下降,实时索引搜索效率不高。
    在这里插入图片描述
    在这里插入图片描述
  • 二者安装都很简单;
  • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
  • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

三、安装ES

声明:JDK1.8以上—>最低要求

ES客户端,页面工具!----->基于java开发的和我们之后对应的java的核心jar包!版本对应!

1.下载:

https://www.elastic.co/cn/
在这里插入图片描述

先在windows下学习!

2.安装:

解压
在这里插入图片描述
熟悉目录

  • bin:启动文件

  • config:配置文件

    • log4j2 日志配置文件
    • jvm.options java虚拟机配置
    • elasticsearch.yml es配置文件–>默认9200端口
  • jdk

  • lib 相关jar包

  • logs 日志

  • modules 功能模块

  • plugins 插件!

启动

双击bin目录下的.bat文件
在这里插入图片描述

安装可视化插件 head

发现问题:跨域问题。

可视化工具提供的端口是9100

而我们的ES则是9200,不互通

解决方法:在ES的配置文件中,修改跨域

http.cors.enabled: true
http.cors.allow-origin: "*"

启动测试:cmd命令下–npm run start
在这里插入图片描述

网页测试
在这里插入图片描述

目前可以把ES的索引理解成数据库!
在这里插入图片描述

文档就相当于库中的数据!
在这里插入图片描述

这个head我们就理解成数据展示工具

我们后面所有的查询,可以去kibana去做

四、安装Kibana

1.了解ELK

ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。

img

ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
Logstash是一个具有实时传输能力的数据收集引擎,用来进行数据收集(如:读取文本文件)、解析,并将数据发送给ES。
Kibana为 Elasticsearch 提供了分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度表格、图形。
在这里插入图片描述

2.安装kibana

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。

你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。

你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。

Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。

官网:https://www.elastic.co/cn/kibana

kibana版本必须和ES版本一致
在这里插入图片描述

目录结构
在这里插入图片描述
启动
在这里插入图片描述

访问测试
在这里插入图片描述

开发工具

Post、curl、head、谷歌插件等
在这里插入图片描述

之后所有的操作都在这里进行编写!

汉化
在这里插入图片描述

汉化后展示
在这里插入图片描述

五、ES核心概念

集群,节点,索引,类型,文档,分片,映射是什么?

elasticsearch是面向文档,关系型数据库和elasticsearch客观的对比!一切都是json

Relational DB Elasticsearch
数据库(database) 索引(indices)
表(tables) types
行(rows) documents
字段(columns) fields

物理设计

elasticsearch在后台把每个索引划分成多个分片。每个分片可以在集群中的不同服务器间迁移

一个人就是一个集群!默认集群名就是elasticsearch
在这里插入图片描述
逻辑设计

一个索引类型中,包含多个文档,当我们索引一篇文档时,可以通过这样的一个顺序找到它:索引-》类型-》文档id,通过这个组合我们就能索引到某个具体的文档。注意:ID不必是整数,实际上它是一个字符串。

1.文档

文档

就是我们的一条条的记录

之前说elasticsearch是面向文档的,那么就意味着索引和搜索数据的最小单位是文档, elasticsearch中,文档有几个重要属性:

  • 自我包含, 一篇文档同时包含字段和对应的值,也就是同时包含key:value !
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一 个json对象! fastjson进行自动转换!}
  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。

尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一一个年龄字段类型,可以是字符串也可以是整形。因为elast

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值