JavaWeb_SpringCloud微服务_Day5-elasticsearch
初识elasticsearch
elasticsearch
- elasticsearch: 一个开源的分布式搜索引擎, 可以用来实现搜索, 日志统计, 分析, 系统监控等功能
- elastic stack(ELK): 以elasticsearch为核心的技术栈, 包括beats, Logstash, kibana, elasticsearch
- Lucene: Apache的开源搜索引擎类库, 提供了搜索引擎的核心API
倒排索引
- 文档和词条
- 一条数据就是一个文档
- 对文档中的内容分词, 得到的词语就是词条
- 正向索引
- 基于文档id创建索引. 查询词条时必须先找到文档, 而后判断是否包含词条
- 倒排索引
- 对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档
elasticsearch的基本概念
- 文档: 一条数据就是一个文档,es中是Json格式
- 字段: Json文档中的字段
- 索引: 同类型文档的集合
- 映射: 索引中文档的约束,比如字段名称、类型
- elasticsearch与数据库的关系:
- 数据库负责事务类型操作
- elasticsearch负责海量数据的搜索、分析、计算
安装软件
- 创建网络
要让es和kibana容器互联docker network create es-net
- 部署单点es
docker run -d \ --name es \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/share/elasticsearch/data \ -v es-plugins:/usr/share/elasticsearch/plugins \ --privileged \ --network es-net \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.12.1
--privileged
:授予逻辑卷访问权-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小- 测试: http://192.168.174.133:9200
- 部署kibana
docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTS=http://es:9200 \ --network=es-net \ -p 5601:5601 \ kibana:7.12.1
- 安装IK分词器
- 在线安装(较慢), 不推荐
# 在线安装ik插件(较慢) # 进入容器内部 docker exec -it elasticsearch /bin/bash # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip #退出 exit #重启容器 docker restart elasticsearch
- 离线安装
# 查看挂载的位置 docker volume inspect es-plugins # 然后将下载好的插件拖进去就好了
- 测试
GET /_analyze { "analyzer": "ik_smart", "text": "黑马程序员学习java太棒了" }
- 在线安装(较慢), 不推荐
ik分词器的拓展和停用词典
- 分词器的作用
- 创建倒排索引时对文档分词
- 用户搜索时, 对输入的内容分词
- ik分词器的模式
- ik_smart: 智能切分, 粗粒度
- ik_max_word: 最细切分, 细粒度
- 拓展和停用词条
- 利用config目录的ikAnalyzer.cfg.xml文件添加拓展词典和停用词典
- 在词典中添加拓展词条或者停用词条
索引库操作
mapping属性
- mapping常见属性
- type: 数据类型
- index: 是否索引, 默认true
- analyzer: 分词器
- properties: 子字段
- 常见type
- 字符串: text, keyword
- 数字: long, integer, short, byte, double, float
- 布尔: boolean
- 日期: date
- 对象: object
创建索引库
PUT /heima
{
"mappings": {
"properties": {
"info": {
"type": "text",
"analyzer": "ik_smart"
},
"email": {
"type": "keyword",
"index": false
},
"name": {
"type": "object",
"properties": {
"firstName": {
"type": "keyword"
},
"lastName": {
"type": "keyword"
}
}
}
}
}
}
查询, 删除, 修改索引库
GET /heima
// 添加字段, 不能修改字段
PUT /heima/_mapping
{
"properties":{
"age": {
"type": "integer"
}
}
}
DELETE /heima
文档操作
# 查询文档
GET /heima/_doc/1
# 删除文档
DELETE /heima/_doc/1
# 修改文档
## 全量修改, 先删除旧文档, 再增加新文档
PUT /heima/_doc/1
{
"info": "黑马程序员java讲师",
"email": "zhaoyun@itcast.cn",
"name": {
"firstName": "云",
"lastName": "赵"
}
}
## 增量修改, 修改指定字段值
POST /heima/_doc/1
{
"email": "zyun@itcast.cn"
}
RestAPI
RestHighLevelClient已弃置, 不看了
来源
黑马程序员. SpringCloud微服务