安装ElasticSearch
docker安装ES&Kibana(图形化界面)
version: '3.1'
services:
elasticsearch:
image: daocloud.io/library/elasticsearch:6.8.10
restart: always
container_name: elasticsearch
ports:
- 9200:9200
volumes:
- /opt/docker_es/config/jvm.options:/usr/share/elasticsearch/config/jvm.options
kibana:
image: daocloud.io/library/kibana:6.8.10
restart: always
container_name: kibana
ports:
- 5601:5601
environment:
- elasticsearch_url=http://192.168.232.128:9200
depends_on:
- elasticsearch
运行 docker-compose up -d
启动时间较长,查看日志 docker-compose logs -f
运行失败,因为虚拟机内存不足
我这边换了个方式启动 不使用docker-compose 使用docker 下载安装
关闭 docker-compose down
查看是否有镜像,没有需下载 docker images
docker run方式启动可直接设置jvm
docker run -p 9200:9200 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --name elseticksearch ffa
能访问则成功
安装kibana
docker run -d -p 5601:5601 -e ELASTICSEARCH_URL=http://192.168.232.128:9200 --name kibana 37b
能访问则成功 http://192.168.232.128:5601
安装IK分词器
链接 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.10/elasticsearch-analysis-ik-6.8.10.zip
进入es容器
docker exec -it 43s bash
cd bin
下载IK插件
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.10/elasticsearch-analysis-ik-6.8.10.zip
重启es
docker ps
docker restart 4d
ES结构图
ES - 索引Index(数据库)—(分片备份)—类型Type(表)——文档document(列)——属性Field
创建索引指定类型
#创建索引,指定数据类型
PUT /book
{
"settings": {
#分片数
"number_of_shards": 5,
#备份数
"number_of_replicas": 1
},
#指定数据类型
"mappings": {
#类型 Type
"novel":{
#文档存储的field
"properties":{
#field属性名
"name":{
#类型
"type":"text",
#指定分词器
"analyzer":"ik_max_word",
#指定当前的field可以被作为查询的条件
"index":true,
#是否需要额外存储
"store":false
},
"author":{
"type":"keyword"
},
"count":{
"type":"long"
},
"on-sale":{
"type":"date",
#指定时间类型的格式化方式
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"descr":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
}
#添加文档,手动指定id
PUT /book/novel/1
{
"name":"红楼梦",
"author":"曹雪芹",
"count":10000000,
"on-sale":"2501-01-01",
"descr":"中国古代章回体长篇小说,中国古典四大名著之一,一般认为是清代作家曹雪芹所著。"
}
#修改文档,使用doc 方式
POST /book/novel/1/_update
{
"doc":{
"count":566666
}
}
#根据id删除文档
DELETE /book/novel/3mEnk3MBaSKoGN4T2olw
java连接ES
导入依赖
<!--elasticsearch-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.10</version>
</dependency>
<!--elasticsearch高级API-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.10</version>
</dependency>
public static RestHighLevelClient getClient(){
// 创建 HttpHost
HttpHost httpHost = new HttpHost("192.168.232.128",9200);
// 创建 RestClientBuilder
RestClientBuilder builder = RestClient.builder(httpHost);
// 创建 RestHighLevelClient
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
RestHighLevelClient client = EsClient.getClient();
String index = "person";
String type="man";
/**
* 创建索引
*/
@Test
public void createIndx() throws Exception{
// 1.准备关于索引的setting
Settings.Builder settings = Settings.builder()
.put("number_of_shards", 2)
.put("number_of_replicas", 1);
// 2.准备关于索引的mapping
XContentBuilder mappings = JsonXContent.contentBuilder()
.startObject()
.startObject("properties")
.startObject("name")
.field("type", "text")
.endObject()
.startObject("age")
.field("type", "integer")
.endObject()
.startObject("birthday")
.field("type", "date")
.field("format", "yyyy-MM-dd")
.endObject()
.endObject()
.endObject();
// 3.将settings和mappings 封装到到一个Request对象中
CreateIndexRequest request = new CreateIndexRequest(index)
.settings(settings)
.mapping(type,mappings);
// 4.使用client 去连接ES
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println("response:"+response.toString());
}
/**
* 检查索引存在
*/
@Test
public void existTest() throws IOException {
// 1.准备request 对象
GetIndexRequest request = new GetIndexRequest(index);
// 2.通过client 去 操作
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
// 3输出结果
System.out.println(exists);
}
/**
* 删除索引
*/
@Test
public void testDelete() throws IOException {
// 1.获取request
DeleteIndexRequest request = new DeleteIndexRequest(index);
// 2.使用client 操作request
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
// 3.输出结果
System.out.println(delete.isAcknowledged());
}
学习视频链接:https://www.bilibili.com/video/BV1Qz411e7yx?p=11
友情文档链接:https://github.com/changxuepeng/ElasticsearchStudy/blob/master/ES%E7%AC%94%E8%AE%B0/ES%E7%AC%94%E8%AE%B0.md