ElasticSearch
2020-04-15 17:39:23 1 举报
AI智能生成
elasticsearch脑图
作者其他创作
大纲/内容
1.Elasticsearch简介
基于Lucene做了一些封装和增强,是一个实时分布式搜索和分析引擎
分析
结构化搜索
全文搜索
2.ES和solr的差别
Solr简介
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。<br>Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化
Solr 索引的实现方法很简单,用 POST方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。<br>Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。
二者对比
安装
es基本是开箱即用,Solr安装略微复杂一丢丢!
管理<br>
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能
数据格式
Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
功能
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多由第三方插件提供,例如图形化界面需要kibana友好支撑<br>
性能
Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用<br>
ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
热度
Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区。<br>而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。(Elasticsearch是趋势!)
3.ES安装
目录结构
bin 启动文件<br><br>config 配置文件<br><br>log4j2 日志配置文件<br><br>jvm.options java 虚拟机相关的配置<br><br>elasticsearch.yml elasticsearch 的配置文件! 默认 9200 端口! 跨域!<br><br>lib 相关jar包<br><br>logs 日志!<br><br>modules 功能模块<br><br>plugins 插件!
启动
localhost:9200
可视化界面
安装elasticsearch-head-master
cnpm install
npm run start
解决跨域问题
elasticsearch.yml
http.cors.enabled: true<br>http.cors.allow-origin: "*"
重启ES服务,再次连接
4.了解 ELK
Elasticsearch<br>
Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
Logstash<br>
Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,<br>经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
Kibana
Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
5.Kibana安装
版本
要与ES版本一致
汉化
ikbana.yml<br>
i18n.locale: "zh-CN"
启动并访问
localhost:5601<br>
6.ES核心概念
elasticsearch是面向文档的<br>意味着索引和搜索数据的最小单位是文档<br>
集群<br>
一个人就可以是一个集群!默认的集群名称就是 elaticsearh
集群中可以包含多个索引(数据库)
节点<br>
一个节点就是一个elasricsearch进程
分片
elasticsearch创建索引时,在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移<br>
一个分片是一个Lucene索引,即一个包含倒排索引的文件目录。所以一个elasticsearch索引是由多个Lucene索引组成的
索引<br>
相当于RDB中的数据库
每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)
倒排索引
类型<br>
相当于RDB中的表,是文档的逻辑容器
文档<br>
相当于RBD中的行数据
一句话,ElasticSearch一般会搭建集群,一个集群有多个节点,创建索引的时候,<br>可以选择分片数和每个分片的副本数,创建的索引分片会分布在不同节点上,避免某个节点挂掉造成数据丢失
7.ik分词器
安装
重启elasticsearch
解压到elasticsearch安装路径下的plugins文件夹的ik目录中
分词算法
ik_smart 为最少切分
ik_max_word为最细粒度划分!穷尽词库的可能!字典!<br>
添加自定义分词词典
进入ik的config目录,新建一个自定义字典my.dic
配置IKAnalyzer.cfg.xml
<entry key="ext_dict">my.dic</entry>
8.Rest风格操作索引和文档
操作索引
POST
创建文档(随机id)
localhost:9200/索引名称/类型名称
修改文档
localhost:9200/索引名称/类型名称/文档id/_update
查询所有数据
localhost:9200/索引名称/类型名称/_search
DELETE
删除文档
localhost:9200/索引名称/类型名称/文档id
PUT
创建文档(指定id)
localhost:9200/索引名称/类型名称/文档id
GET
通过文档id查询文档
localhost:9200/索引名称/类型名称/文档id
如果自己的文档字段没有指定,那么es 就会给我们默认配置字段类型!
通过get _cat/ 可以获得es的当前的很多信息!
操作文档
添加数据
PUT /kk/user/1<br>{<br> "name": "kk",<br> "age": 22<br>}
获取数据
GET /kk/user/1
更新数据
PUT
PUT /kk/user/1<br>{<br> "name": "kk",<br> "age": 18<br>}
Post _update , 推荐使用
POST /kk/user/1/_update<br>{<br> "doc": {<br> "age": 18<br> }<br>}<br>
条件查询
匹配
Get kk/user/_search<br>{<br> "query": {<br> "match": {<br> "name" : "kk"<br> }<br> }<br>}
排序
Get kk/user/_search<br>{<br> "sort": [{<br> "age": { "order": "asc" }<br> }]<br>}
分页
Get kk/user/_search<br>{<br> "from": 0,<br> "size": 1<br>}
布尔值
must(and)
Get kk/user/_search<br>{<br> "query": {<br> "bool": {<br> "must": {<br> "name": "kk"<br> }<br> }<br> }<br>}<br>
must_not(not)
Get kk/user/_search<br>{<br> "query": {<br> "bool": {<br> "must_not": {<br> "name": "kk"<br> }<br> }<br> }<br>}<br>
should(or)
Get kk/user/_search<br>{<br> "query": {<br> "bool": {<br> "should": {<br> "name": "kk"<br> }<br> }<br> }<br>}<br>
过滤器
Get kk/user/_search<br>{<br> "query": {<br> "filter": {<br> "range": {<br> "age": {<br> "gte": 3,<br> "lte": 25<br> }<br> }<br> }<br> }<br>}<br>
分词查询
match
会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)
keyword类型不会被分词器解析
term精确查询
代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解
查看分词情况
GET test/_analyze<br>{<br> analyzer: "keyword"或者"standard"<br> "text" : "love China"<br>}<br>
term和match的区别
https://www.jianshu.com/p/d5583dff4157
9.高亮查询
高亮显示的字段
"highlight": {<br> "fields" : {<br> "name" : { }<br> }<br>}
自定义html显示格式
"highlight": {<br> "pre_tags" : "<p style="color: red">",<br> "post_tags" : "</p>",<br> "fields" : {<br> "name" : { }<br> }<br>}
9、集成SpringBoot
导入依赖
<dependency><br> <groupId>org.elasticsearch.client</groupId><br> <artifactId>elasticsearch-rest-high-level-client</artifactId><br> <version>7.6.2</version><br></dependency>
修改默认ElasticSearch版本为自己的船新版本
<properties><br> <java.version>1.8</java.version><br> <!--自定义ElasticSearch版本依赖--><br> <elasticsearch.version>7.6.1</elasticsearch.version><br> </properties>
创建项目,注入初始化组件
@Configuration<br><br>public class ElasticSearchConfig {<br> @Bean<br> public RestHighLevelClient restHighLevelClient(){<br> RestHighLevelClient client = new RestHighLevelClient(<br> RestClient.builder(<br> new HttpHost("localhost", 9200, "http")));<br> return client;<br> }<br>} <br>
10、具体的Api测试
代码
创建索引<br>
判断索引是否存在<br>
删除索引<br>
创建文档<br>
crud文档
收藏
收藏
0 条评论
下一页