RESTFul 访问
索引操作文档操作查询操作 Java API 访问
环境配置常用 API高级操作 微信关注『方糖算法』
RESTFul 访问 索引操作一切操作遵从 RESTFul 风格。
1、创建索引
发送 PUT 请求:http://127.0.0.1:9200/索引名称
2、查看索引
指定:发送 GET 请求:http://127.0.0.1:9200/索引名称
全部:发送 GET 请求:http://127.0.0.1:9200/_cat/indices?v
3、删除索引
发送 DELETe 请求:http://127.0.0.1:9200/索引名称
文档操作1、创建文档
随机ID:发送 POST 请求:http://127.0.0.1:9200/索引名称/_文档名称
指定ID:发送 POST 请求:http://127.0.0.1:9200/索引名称/_文档名称/ID
2、查看文档
指定:发送 GET 请求:http://127.0.0.1:9200/索引名称/_文档名称/ID
全部:发送 GET 请求:http://127.0.0.1:9200/索引名称/_search
3、修改文档
完全覆盖:发送 PUT 请求:http://127.0.0.1:9200/索引名称/_文档名称/ID
局部覆盖:发送 POST 请求:http://127.0.0.1:9200/索引名称/_update/ID
删除:发送 DELETE 请求:http://127.0.0.1:9200/索引名称/_文档名称/ID
条件查询 & 分页查询 & 排序查询
# 请求体
http://127.0.0.1:9200/索引名称/_search
字段值存入 Body 中查询
{
"query":{
"match_all":{
}
},
"from": 2,
"size": 5,
"_source": ["name"],
"sort": {
"age": {
"order" : "desc",
}
}
}
多条件查询 & 范围查询
# 请求体
http://127.0.0.1:9200/索引名称/_search
字段值存入 Body 中查询
{
"query": {
"bool": {
"must" : [
{
"match": {
"age" : "21",
}
},
{
"match": {
"name" : "鲨鱼怪"
}
}
],
"filter": {
"range": {
"age" : {
"gt" : "20"
}
}
}
}
}
}
全文检索 & 完全匹配 & 高亮查询
# 请求体
http://127.0.0.1:9200/索引名称/_search
# 全文检索,模糊查询
{
"query": {
"match": {
"name": "飞"
}
}
}
# 完全匹配
{
"query": {
"match_phrase": {
"name": "飞"
}
}
}
# 高亮查询
{
"query": {
"match": {
"name": "小米"
}
},
"highlight": {
"fields": {
"age": {}
}
}
}
聚合查询
# 请求体
http://127.0.0.1:9200/索引名称/_search
# 分组查询
{
"aggs": { // 聚合查询
"age_group": { // 统计结果名称
"terms": { // 分组
"field" : "age" // 分组字段
}
}
},
"size": 0 // 忽略原始数据
}
略
Java API 访问
环境配置
常用 APIorg.elasticsearch elasticsearch 7.10.1 org.elasticsearch.client elasticsearch-rest-high-level-client 7.10.1 org.apache.logging.log4j log4j-api 2.8.2 org.apache.logging.log4j log4j-core 2.8.2 com.fasterxml.jackson.core jackson-databind 2.9.9 junit junit 4.12
代码类似,不必深究。
// 创建索引
CreateIndexRequest request = new CreateIndexRequest("role2");
client.indices().create(request, RequestOptions.DEFAULT);
// 查询索引
GetIndexRequest request = new GetIndexRequest("role2");
client.indices().get(request, RequestOptions.DEFAULT);
// 删除索引
DeleteIndexRequest request = new DeleteIndexRequest("role2");
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
// 文档插入
IndexRequest request = new IndexRequest();
request.index("user").id("1001");
User user = new User();
user.setName("张飞");
user.setSex("男");
user.setAge(20);
String data = JSON.toJSONString(user);
request.source(data, XContentType.JSON);
client.index(request, RequestOptions.DEFAULT);
// 文档更新 - 局部修改
UpdateRequest request = new UpdateRequest();
request.index("user").id("1001");
request.doc(XContentType.JSON,"sex","女");
client.update(request, RequestOptions.DEFAULT);
// 文档查询
GetRequest request = new GetRequest();
request.index("user").id("1001");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
// 文档删除
DeleteRequest request = new DeleteRequest();
request.index("user").id("1001");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
高级操作
1、批量插入 & 批量删除
// 文档批量插入
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON,"name","李四"));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON,"name","王五"));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON,"name","赵大妈"));
request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","运费"));
request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON,"name","题目"));
BulkResponse response = client.bulk(request,RequestOptions.DEFAULT);
// 文档批量删除
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1001"));
request.add(new DeleteRequest().index("user").id("1002"));
request.add(new DeleteRequest().index("user").id("1003"));
request.add(new DeleteRequest().index("user").id("1004"));
request.add(new DeleteRequest().index("user").id("1005"));
BulkResponse response = client.bulk(request,RequestOptions.DEFAULT);
2、全量查询
// 文档全查询
SearchRequest request = new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
3、分页查询 & 条件查询 & 字段查询
// 条件查询
SearchRequest request = new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30))));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 分页查询 (页码-1) * size
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.from(4);
builder.size(2);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 查询排序
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 字段查询
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes = {"age"};
String[] includes = {};
builder.fetchSource(includes,excludes);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
4、组合查询 & 范围查询
// 组合查询
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 范围查询
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
rangeQuery.gte(30);
rangeQuery.lte(40);
builder.query(rangeQuery);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
5、模糊查询 & 高亮查询
// 模糊查询
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.fuzzyQuery("name", "肖").fuzziness(Fuzziness.ONE));
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 高亮查询
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", 30);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("");
highlightBuilder.postTags("");
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
builder.query(termQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
微信关注『方糖算法』
各类面试资料、内推资源,关注微信公众号获取哦。



