0%

浅谈ElasticSearch

概述

Elaticsearch,简称为es, es是一个开源的高扩展分布式全文检索引擎,它可以近乎实时的存储、检索数据本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTfulAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单

安装

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

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

1
2
3
4
5
6
7
8
9
10
# 目录结构
bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关的配置
elasticsearch.yml  elasticsearch 的配置文件! 默认 9200 端口! 跨域!
lib   相关jar包
logs   日志!
modules 功能模块
plugins 插件!

1.解压启动

windows 下进入bin目录,运行elasticsearch.bat,,访问127.0.0.1:9200

image-20210502183733343

2.安装可视化界面 es head插件(要先装node.js)

连接测试发现,存在跨域问题,配置es

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

重启es服务器,然后再次连接

image-20210502200832019

注意:存在跨域问题,解决方案:在elasticsearch.yml配置文件上添加

1
2
3
# 解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"

3.Kinbanna

官网:https://www.elastic.co/cn/kibana
Kibana 版本要和 Es 一致!

3.1 了解ELK

ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为ElasticStack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能
市面上很多开发只要提到ELK能够一致说出它是一个日志分析架构技术栈总称,但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。并非唯一性。

3.2 了解Kibanna

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索
引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理
解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查
询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动
Elasticsearch索引监测。

3.3 安装启动

官网下载,直接启动,访问localhost:5601即可

image-20210502205110512

使用kibanna的开发工具

image-20210502211723241

3.4 汉化

1
2
# 在config.yml添加
i18n.locale: "zh-CN"

使用

暂时将索引当做数据库来看待。索引 对应数据库,文档对应 库中的数据。面向文档,一切皆JSON

1.新建索引概览

image-20210502202031314

2.与数据库的映射关系

elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多 个文档(行),每个文档中又包含多个字段(列)。

image-20210502213357552

3. 设计

  • 物理设计

    elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移一个人就是一个集群!默认的集群名称就是elaticsearh。

  • 逻辑设计

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

4. 倒排索引

elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索, 一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。

  • 例子

    image-20210502214814967

5.安装ik分词插件

1、https://github.com/medcl/elasticsearch-analysis-ik
2、下载完毕之后,放入到我们的elasticsearch 插件目录plugins下即可!(注:版本要和elasticsearch一致)

ik提供了两个分词算法:

  • ik_smart:最少切分
  • ik_max_word:最细粒度切分(穷尽词库的去划分) 字典

6. 使用kibana测试分词效果

6.1效果

  • ik_smart分词效果

    image-20210502233716287

  • ik_max_word 分词效果

    image-20210502233830186

6.2问题

有些字的组成不能被称之为词,比如人名(张三、千仞雪)等,但是我们希望它能当做词来处理,这个时候我们就需要将它放入我们的字典中。

方案
  • 新建自己的字典文件,my.dic
  • 在my.dic 文件添加自己的分词,比如千仞雪
  • 在IKAnalyzer.cfg.xml中添加自己的字典文件 my.dic到扩展字典中

Restful风格操作

image-20210502235417964

SpingBoot整合ES(实战)

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

获得原生依赖

1
2
3
4
5
<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-high-level-client</artifactId>
  <version>7.6.2</version>
</dependency>

初始化

image-20210503114252881

熟悉一些API

restful风格

创建 put

编辑 post

查询 get 查询体query

分页 form size

实战

结合着jsoup爬虫去使用