03-03 elasticsearch

入门篇

使用场景

  1. 海量存储:支持分布式存储
  2. 实时搜索:lucene倒排索引,海量数据下近乎实时搜索
    a. 日志分析,es+logstash+kibana
    b. Github代码
  3. 数据分析:支持数据分析及处理

基本功能

  1. 分布式的搜索引擎和数据分析引擎
  2. 全文检索,结构化检索,数据分析
  3. 海量数据实时处理

根据这些功能,可以实现的使用场景

  1. 某张表有海量数据,需要实时快速查询
  2. 数据分析

带来的问题

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。每个字段可以自定义:存储、分词、类型等

基本使用

索引

索引的名称必须是小写的,且不可重名

  1. 查询现有所有索引
curl 'localhost:9200/_mapping?pretty=true'
  1. 创建一个索引
curl -X PUT 'localhost:9200/weather'
{
# 参数设置分片数量、副本数量
    "settings": {
        "index": {
            "number_of_shards": 3,
            "number_of_replicas": 3
        }
    }
}
  1. 创建一个索引的一个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"
            }
        }
    }
}
  1. 删除索引
curl -X DELETE 'localhost:9200/weather'

数据

  1. 新增数据 Index/Type/Id
curl -X PUT 'localhost:9200/accounts/person/1' -d '
{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}' 
  1. 更新数据
curl -X PUT 'localhost:9200/accounts/person/1'
  1. 删除数据
curl -X DELETE 'localhost:9200/accounts/person/1'
  1. 查询全部数据
curl 'localhost:9200/accounts/person/_search'
  1. 参数匹配 match表示包含,bool表示精确
curl 'localhost:9200/accounts/person/_search'  -d '
{
  "query" : { "match" : { "desc" : "软件" }}
}'
  1. 分页查询
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之后,重新依赖

高级篇

基本原理

问题解决

数据一致性问题

数据丢失

你可能感兴趣的:(03-03 elasticsearch)