elasticsearch
1. 初识
1.1 与Mysql对比

1.2 架构
- Mysql:擅长事务类型操作,可以确保数据的一致性和安全性(ACID)
- ES:不具备ACID,擅长海量数据的搜索、分析、计算

2. 安装
2.1 创建网络
需要让es和kibana容器互联
docker network create es-net
ee1a87c8b2428f5d773951f4a8b4052b3a74cd9c2d83c27e999806eaaeb363e8

2.2 拉取&启动es
docker pull elasticsearch:7.12.1
docker run --name elasticsearch -d -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
2.3 拉取&启动kibana
docker pull kibana:7.12.1
docker run --name kibana -d -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 --network es-net -p 5601:5601 kibana:7.12.1
ELASTICSEARCH_HOSTS=http://elasticsearch:9200: 因为俩容器在同一个网络,所有可以用容器名访问
2.4 安装ik分词器
# 需要FQ
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
2.4.1 分词粒度
- ik_smart(粗粒度)

- ik_max_word(细粒度)

2.4.2 扩展用法

3. 索引库操作
3.-1 mapping属性
- type: 字段数据类型,常见的如下
- 字符串
- text:可分词文本
- keyword:精确值,即不需要分词
- 数值:long、integer、short、byte、double、float
- 布尔:boolean
- 日期:date
- 对象:object
- 字符串
- index: 是否创建索引,默认为true
- analyzer: 分词器
- properties: 子字段
3.0 基本操作

3.1 创建库
PUT /heima
{
"mappings": {
"properties": {
"info": {
"type": "text",
"analyzer": "ik_smart"
},
"email": {
"type": "keyword"
},
"score": {
"type": "double"
},
"name": {
"type": "object",
"properties": {
"firstname": {
"type": "keyword"
},
"lastname": {
"type": "keyword"
}
}
}
}
}
}
3.2 修改索引库
索引库和mapping一旦创建无法修改,但可以新增字段

4. 文档操作
4.1 新增、查询、删除


4.2 修改
4.2.1 全量修改
删除旧文档,添加新文档
PUT /索引库名/_doc/文档id
{
...
}
4.2.2 增量修改
POST /索引库名/_update/文档id
{
"doc":{
"字段名":"新值"
}
}
5. RestClient操作索引库
5.1 demo
5.1.1 导入文件
5.1.2 初始化酒店数据的mapping
5.1.3 初始化JavaRestClient

5.1.4 JavaRestClient操作索引库
1. 新增
public class HotelIndexsTest {
private RestHighLevelClient client;
@BeforeEach
void init(){
this.client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.56.3:9200")
));
}
@Test
void testCreateHotelIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("hotel");
request.source("", XContentType.JSON);
client.indices().create(request, RequestOptions.DEFAULT);
}
@AfterEach
void destroy() throws IOException {
this.client.close();
}
}
2. 删除&是否存在

浙公网安备 33010602011771号