入门篇
使用场景
- 海量存储:支持分布式存储
- 实时搜索:lucene倒排索引,海量数据下近乎实时搜索
a. 日志分析,es+logstash+kibana
b. Github代码 - 数据分析:支持数据分析及处理
基本功能
- 分布式的搜索引擎和数据分析引擎
- 全文检索,结构化检索,数据分析
- 海量数据实时处理
根据这些功能,可以实现的使用场景
- 某张表有海量数据,需要实时快速查询
- 数据分析
带来的问题
ES用在海量数据实时查询,基本的数据分析等,它的数据关联性不好。
项目中考虑是否真的满足选用条件,否则用数据库,mysql也可以搞集群,分库分表等,满足海量数据。
基本命令
安装
单机
# 参考链接: https://www.elastic.co/guide/cn/kibana/current/docker.html
# https://www.elastic.co/guide/cn/kibana/current/tutorial-visualizing.html
# 1. es 与 kibana 版本必须一致,否则不能启动成功
# 2. 启动es命令
CMD docker run --name elasticsearch -p 9200:9200 -p 9300:9300 --network mynet -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -v $PWD/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v $PWD/es/logs:/usr/share/elasticsearch/logs -v $PWD/es/data:/usr/share/elasticsearch/data -v $PWD/es/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.12.0
# 其中elasticsearch.yml是挂载的配置文件,data是挂载的数据,plugins是es的插件,如ik。
# 而数据挂载需要权限,需要设置data文件的权限为可读可写,需要下边的指令。
chmod -R 777 要修改的路径
-e "discovery.type=single-node" 设置为单节点
特别注意:
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES
# 3. 启动kibana命令
CMD docker run --name kibana -d -p 5601:5601 --network mynet -e ELASTICSEARCH_URL=http://localhost:9200 -v $PWD/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.12.0
# 4. 查看容器内部IP
CMD docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名/容器id
# 5. ik分词器 https://github.com/medcl/elasticsearch-analysis-ik/releases
# https://www.cnblogs.com/szwdun/p/10664348.html
cd /usr/share/elasticsearch/plugins/
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
# 注意:如果虚拟机内部可以正常访问,宿主机不能访问,检查自定义局域网设置的IP,大坑
集群
简单版:https://blog.csdn.net/qq_39124762/article/details/106698814
自建镜像版:https://github.com/imyoungyang/docker-swarm-elasticsearch/blob/master/docker-prod-stack.yml
基本概念
参考链接:http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
官方网站:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
Index
一组数据的存储单位,类似数据库的数据表,要求字段必须相同。很多网站称为数据库,Type才是数据表,这里我认为是不对的。Index就是一张表,只是根据Type就行细切片了。
Type
对每个Index进行分类。7.X以上已经移除了
Document
一个Index中的每条数据记录就是一个document。由多个字段field组成。
field
每个document中的每个字段就是一个field。每个字段可以自定义:存储、分词、类型等
基本使用
索引
索引的名称必须是小写的,且不可重名
- 查询现有所有索引
curl 'localhost:9200/_mapping?pretty=true'
- 创建一个索引
curl -X PUT 'localhost:9200/weather'
{
# 参数设置分片数量、副本数量
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 3
}
}
}
- 创建一个索引的一个Type 2/3可以一步创建
curl -X PUT 'localhost:9200/weather/accounts' -d '
# 参数设置字段、分词器
{
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"title": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"type": "text"
}
}
}
}
- 删除索引
curl -X DELETE 'localhost:9200/weather'
数据
- 新增数据 Index/Type/Id
curl -X PUT 'localhost:9200/accounts/person/1' -d '
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}'
- 更新数据
curl -X PUT 'localhost:9200/accounts/person/1'
- 删除数据
curl -X DELETE 'localhost:9200/accounts/person/1'
- 查询全部数据
curl 'localhost:9200/accounts/person/_search'
- 参数匹配 match表示包含,bool表示精确
curl 'localhost:9200/accounts/person/_search' -d '
{
"query" : { "match" : { "desc" : "软件" }}
}'
- 分页查询
curl 'localhost:9200/accounts/person/_search' -d '
{
"query" : { "match" : { "desc" : "管理" }},
"from": 1,
"size": 1
}'
整合springboot
用法与mybatis相同,
参考链接:https://www.cnblogs.com/huanshilang/p/14382279.html
Spring boot版本兼容性问题很头疼。。。。所以一般决定了springboot版本再去查询对应的各个插件的兼容版本
可以exclusions之后,重新依赖