概述
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTfulAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。
安装
1 | # 目录结构 |
1.解压启动
windows 下进入bin目录,运行elasticsearch.bat,,访问127.0.0.1:9200

2.安装可视化界面 es head插件(要先装node.js)
启动
1
2npm install #安装依赖
npm run start #正式启动
连接测试发现,存在跨域问题,配置es
1 | http.cors.enabled: true |
重启es服务器,然后再次连接

注意:存在跨域问题,解决方案:在elasticsearch.yml配置文件上添加
1 | # 解决跨域问题 |
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即可

使用kibanna的开发工具

3.4 汉化
1 | # 在config.yml添加 |
使用
暂时将索引当做数据库来看待。索引 对应数据库,文档对应 库中的数据。面向文档,一切皆JSON
1.新建索引概览

2.与数据库的映射关系
elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多 个文档(行),每个文档中又包含多个字段(列)。

3. 设计
物理设计
elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移一个人就是一个集群!默认的集群名称就是elaticsearh。
逻辑设计
一个索引类型中,包含多个文档,比如说文档1,文档2。 当我们索引一篇文档时,可以通过这样的一各顺序找到 它: 索引 ▷ 类型 ▷ 文档ID ,通过这个组合我们就能索引到某个具体的文档。 注意:ID不必是整数,实际上它是个字 符串。
4. 倒排索引
elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索, 一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。
例子
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分词效果
ik_max_word 分词效果
6.2问题
有些字的组成不能被称之为词,比如人名(张三、千仞雪)等,但是我们希望它能当做词来处理,这个时候我们就需要将它放入我们的字典中。
方案
- 新建自己的字典文件,my.dic
- 在my.dic 文件添加自己的分词,比如千仞雪
- 在IKAnalyzer.cfg.xml中添加自己的字典文件 my.dic到扩展字典中
Restful风格操作

SpingBoot整合ES(实战)
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
获得原生依赖
1 | <dependency> |
初始化

熟悉一些API
restful风格
创建 put
编辑 post
查询 get 查询体query
分页 form size
…
实战
结合着jsoup爬虫去使用