起步
es的数据传输格式为
json,
创建索引
利用postman等工具,发送put请求,并遵守restful风格
http://ip/shopping,其中shopping即为创建的索引,请求方式为PUT
- es支持的请求方式有[
GET,DELETE,PUT,HEAD],POST请求方式不具有幂等性,不能使用- GET请求获取索引信息
http://ip/shopping- 查看索引的具体信息
http://ip/shopping/_cat/indcies?v- DELETE删除索引
http://ip/shopping
创建文档
利用POST请求在索引中创建文档
http://ip/shopping/_doc,并且请求题体格式为Raw,数据格式为Json- 也可以后面跟上文档的id:
http://ip/shopping/_doc/id,PUT请求可采取此方式创建文档查询文档
- 采用GET请求获取单个文档,
http://ip/shopping/_doc/id- 利用GET请求获取某索引下的全部文档,
http://ip/shopping/_search
更新文档
- 利用post请求更新文档,可更新局部
http://ip:port/index/_update/id # 请求体 { "doc":{ "name":"ymj", "age":"20" } }
- 利用put请求更新文档,可进行全局更新
http://ip:port/index/_doc/id # 请求体 { "adress":"jiangxi", "area":"china" }
查询文档
- 条件查询通过路径
http://ip:port/test/_search?q=address:jiangxi
q=key:value 对象形式可通过
object.key:value进行匹配
- 条件查询通过请求体
http://ip:port/test/_search请求体
//查询部分doc,只显示单条数据 { "query":{ "match":{ "address":"jiangxi" } } } //查询全部doc { "query":{ "match_all":{//匹配全部 } }, "from":0,//分页查询的起始页 "size":2,//每页的显示条数 "_source":["address","area"],//显示的内容key "sort":{//进行排序 "area":{//排序的字段 "order":"desc"//排序的方式,采用降序 } } }
条件匹配查询
{
"query":{
"bool":{//可设置多个匹配条件
"must":[
{
"match":{//一个match只能添加一个条件
"address":"jiangxi"
}
}
],
"filter":{//过滤器
"range":{
"price":{
"gt":5000//gt大于,lt小于
}
}
}
}
}
}
聚合查询
//分组
{
"aggs":{//聚合操作
"price_group":{//名称,可任意
"terms":{//分组
"field":"price" //分组字段
}
}
}
}
//平均值
{
"aggs":{//聚合值
"price_avg":{//任意名称
"avg":{//平均值
field:"price"//分组字段
}
}
}
}
映射关系_mapper
请求方式
http:/ip:port/index/_mapping-GET
json
{
"properties":{
"name":{
"type":"text",//设置为文本,可被拆分
"index":true//设置为可被检索
},
"sex":{
"type":"keyword",
"index":true
},
"tel":{
"type":"keyword",//设置为关键词,不可被拆分
"index":"false"//设置不被索引
}
}
}
java客户端API
引入依赖Maven
<!-- 导入elasticsearch低级客户端依赖 -->
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.12.1</version>
</dependency>
<!-- elasticsearch高级客户端依赖 -->
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.1</version>
</dependency>
<!-- jackson依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<!-- 日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
索引
索引创建
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建索引请求对象
CreateIndexRequest createIndexRequest = new CreateIndexRequest("user");
//创建索引响应对象
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
//获取响应结果
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println(acknowledged ? "操作成功!" : "操作失败!");
查看索引
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建索引删除请求对象
GetIndexRequest request = new GetIndexRequest("user");
//创建删除索引响应对象
GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
//获取删除缩印响应结果
System.out.println(getIndexResponse.getAliases());
System.out.println(getIndexResponse.getSettings());
System.out.println(Arrays.toString(getIndexResponse.getIndices()));
删除索引
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建索引删除请求对象
DeleteIndexRequest DeleteUser = new DeleteIndexRequest("user");
//创建删除索引响应对象
AcknowledgedResponse delete = restHighLevelClient.indices().delete(DeleteUser, RequestOptions.DEFAULT);
//获取删除缩印响应结果
boolean acknowledged = delete.isAcknowledged();
System.out.println(acknowledged ? "操作成功!" : "操作失败!");
文档doc
- 文档的单个创建使用
IndexRequest,客户端对象采用index方法。批量插入可使用BulkRequest添加IndexRequest对象,客户端采用bulk方法,注意source的使用,要求键值对- 文档的修改使用
updateRequest,客户端对象采用update方法。- 文档的删除使用
deleteRequest,客户端采用delete方法。批量删除可使用BulkRequest添加deleteRequest对象,客户端采用bulk方法- 文档的查询使用
GetRequest,客户端采用get方法。
创建
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建索引请求对象
IndexRequest request = new IndexRequest();
request.index("user").id("21112135");//设置索引和id
//获取ObjectMapper序列化工具-jackson依赖
ObjectMapper objectMapper = new ObjectMapper();
student student = new student();
student.setAge(21);
student.setName("tangzhifeng");
String studentJson = objectMapper.writeValueAsString(student);//将对象序列化为json对象
request.source(studentJson, XContentType.JSON);//设置请求体和内容
IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.getResult());
批量插入
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//批量插入文档
BulkRequest request = new BulkRequest();
//进行批量插入
//数据填入键值对,需两两配对,键key为String,键值value为Object
request.add(new IndexRequest().index("user").id("200").source(XContentType.JSON, "name", "tzf", "age", 21));
request.add(new IndexRequest().index("user").id("201").source(XContentType.JSON, "name", "dmc", "age", 22));
request.add(new IndexRequest().index("user").id("202").source(XContentType.JSON, "name", "zh", "age", 21));
request.add(new IndexRequest().index("user").id("203").source(XContentType.JSON, "name", "fgy", "age", 22));
request.add(new IndexRequest().index("user").id("204").source(XContentType.JSON, "name", "mother", "age", 18));
//注入
BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures());//输出批量插入的结果
//释放资源
restHighLevelClient.close();
修改
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建修改请求对象
UpdateRequest request = new UpdateRequest();
request.index("user").id("21112135");//设置索引和id
//修改文档,设置修改信息
request.doc(XContentType.JSON, "name", "ymj", "age", 20);
UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);//注入至es客户端
DocWriteResponse.Result result = update.getResult();//获取修改结果
System.out.println(result);//响应成功!
删除
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建修改请求对象
DeleteRequest request = new DeleteRequest();
request.index("user").id("21112135");//设置索引和id
//删除文档
DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);//注入request
System.out.println(delete.toString());
批量删除
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建批量化请求对象
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("200"));//添加删除request
request.add(new DeleteRequest().index("user").id("201"));
BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());//删除所花费的时间
System.out.println(bulk.hasFailures());//判断是否删除失败
restHighLevelClient.close();//资源释放
获取查询
高级查询:
//创建高级es客户端对象
RestHighLevelClient restHighLevelClient =
new RestHighLevelClient(RestClient.builder(new HttpHost("ip", 9200)));
//创建get请求对象
GetRequest request = new GetRequest();
request.index("user").id("21112135");//设置查询的索引和id
//查询文档
GetResponse getResponse = restHighLevelClient.get(request, RequestOptions.DEFAULT);//注入request
System.out.println(getResponse.getSourceAsString());
启动es服务
切记,不要使用windows的
docker桌面工具启动容器 ,通过命令行启动如果启动成功后,无法访问页面:
请找
/usr/share/elasticsearch/config/elasticsearch.yml该配置文件修改如下配置:改为false
首先先创建专有网络
docker network create esnet
# 在启动服务
docker run --name es -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.type=single-node" 8552a239ee1e
挂载数据卷
先创建好如下文件,用于挂载
安装分词器
# 进入容器内部
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
es集群
官网文档
restful的api文档
[REST APIs | Elasticsearch Guide 8.8] | Elastic,整个restful的request文档
[搜索接口 |弹性搜索指南 8.8] |弹性的 (elastic.co) [Document APIs | Elasticsearch Guide 8.8] | Elastic,请求文档,包括创建索引,文档等request
