elasticSearch
1.基础概念
全文搜索属于常见的需求,ElasticSearch是全文搜索引擎首选,它可以快速存储,搜索,分析海量数据,底层是lucene,提供REST API接口访问
索引(相当于数据库)
类型(相当于数据表)
文档(相当于一条条的数据)JSON格式
2.倒排索引
分词:将整句拆分为单词
Windows安装
安装网址: https://www.elastic.co/cn/downloads/past-releases#elasticsearch
下载解压后直接进入bin目录,双击运行elasticsearch.bat即可
默认访问路径:http://localhost:9200/
修改配置文件config下elasticsearch.yml为xpack.security.enabled的值设为false
配置自启动
$ elasticsearch-service.bat install
安装ik分词器
安装网址:https://github.com/medcl/elasticsearch-analysis-ik/releases
在elasticsearch下的plugins目录下创建ik文件夹解压,重启elasticsearch
安装kibana
修改kibana配置支持中文:i18n.locale: “zh-CN”
执行\bin\kibana.bat
Docker安装
1.下载镜像文件
$ docker pull elasticsearch:7.4.2
$ docker pull kibana:7.4.2 //可视化检索数据应用
2.创建实例
1.ElasticSearch
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host:0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
注意:-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \测试环境下设置的初始内存和最大内存,太大启动不了
上述如果失败请检查权限:
授读写执行权:在elasticsearch下
$ chmod -R 777 /mydata/elasticsearch/
$ docker start
2.Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.44.128:9200 -p 5601:5601 \ -d kibana:7.4.2
初步检索
1.GET请求
ip+es端口+/_cat/nodes 查看所有节点
ip+es端口+/_cat/health 查看es健康状况
ip+es端口+/_cat/master 查看主节点
ip+es端口+/_cat/indices 查看所有索引
2.索引一个文档(保存)
保存数据,数据在哪个索引和类型下,指定唯一标识
保存数据:
PUT:ip+es端口+索引+类型+唯一标识+json参数
POST:可以不带id,会自动生成,带id和PUT一样
3.查询文档
查询数据:
GET: ip+es端口+索引+类型+唯一标识
4.更新文档
更新数据:
POST:ip+es端口+索引+类型+唯一标识+_update+参数doc
(带_update会检查原数据对比,不带就不需要参数doc,直接填修改值)
PUT:一样
5.删除文档
删除数据:
DELETE:ip+es端口+索引+类型+唯一标识
6.bulk批量API
POST ip+es端口+索引+类型+_bulk
{"index":{"_id":"1"}}
{"name":"john Doe"}
{"index":{"_id":"2"}}
{"name":"jane Doe"}
注:index是保存操作,删除delete,更新update,创建create
https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json
测试数据地址
进阶检索
https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-search.html
官方文档
1.检索数据
GET 类型+/_search?参数
GET 类型+/_search
{
"query":{
"match_all":{}
},
"sort":[{
"排序字段":"asc"
}]
}
(检索所有和排序)
2.Query DSL
QueryDSL仅仅是一个通用的查询框架,专注于通过 JavaAPI 构建类型安全的 Sql 查询,也可以说 QueryDSL 是基于各种 ORM 框架以及 Sql 之上的一个通用的查询框架,QueryDSL 的查询,类是于 SQL 查询,很全面只不过一个是用 SQL 一个是用代码来代替 SQL
3.match匹配查询
精确匹配
GET 类型+/_search
{
"query":{"match":{"字段":"值"}}
}
全文检索,可模糊查询,精确检索,结果按评分排序,会对检索条件进行分词匹配
4.match_phrase短语匹配
将需要匹配的值当成一个整体单词检索,不进行分词
GET 类型+/_search
{
"query":{"match_phrase":{"字段":"值"}}
}
5.multi_match多字段匹配
两个或者两个以上字段都匹配某个值的进行检索,会分词
{
"query":{"multi_match":{
"query":"匹配的值",
"fields":[多个字段],
}
}
}
6.bool复合查询
可以合并任何其他查询语句包括复合查询,复合语句之间可以相互嵌套,表达很复杂的逻辑
must:必须满足-字段+值-条件
must_not:必须不满足-字段+值-条件
should:应该满足-字段+值-条件,不满足也没关系(影响评分)
7.filter结果过滤
并不是所有查询都需有分数,特别是过滤的文档,为了不计算分数es会自动检查场景并优化查询执行
8.term
和match一样,匹配某属性的值,全文检索字段用match,其他非text字段匹配用term
9.aggregations(执行聚合)
聚合提供数据中分组和提取能力,最简单聚合方法大致等于sql group by和sql聚合函数,在es中,执行搜索返回结果并同时返回聚合结果,把响应中结果分开的能力,是非常强大有效的,可以执行查询和多个聚合,并且在一次使用中得到各自任何一个返回结果,使用一次简洁和简化API避免网络往返
aggs:聚合关键字