栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch-JavaApi操作

Elasticsearch-JavaApi操作

Java API 操作

Elasticsearch 软件是由 Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch服务进行访问

创建maven项目,导入以下依赖


    
        org.elasticsearch
        elasticsearch
        7.8.0
    
    
    
        org.elasticsearch.client
        elasticsearch-rest-high-level-client
        7.8.0
    
    
    
        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
    

客户端对象

创建 com.atguigu.es.test.Elasticsearch01_Client 类,代码中创建 Elasticsearch 客户端对象因为早期版本的客户端对象已经不再推荐使用,且在未来版本中会被删除,所以这里我们采用高级 REST 客户端对象

// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
	RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

...
// 关闭客户端连接
client.close();

注意:9200 端口为 Elasticsearch 的 Web 通信端口,10.10.10.113 为启动 ES 服务的主机名

索引操作 创建索引

使用上面的客户端对象

// 创建索引
CreateIndexRequest createIndexRequest = new CreateIndexRequest("user");
CreateIndexResponse createIndexResponse = esClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);

// 响应状态
boolean createIndexResponseAcknowledged = createIndexResponse.isAcknowledged();
System.out.println("索引创建操作:" + createIndexResponseAcknowledged);
// 索引创建操作:true
查询索引
// 查询索引
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT);

// 响应
System.out.println(response.getAliases());
System.out.println(response.getMappings());
System.out.println(response.getSettings());
// {user=[]}
// {user=org.elasticsearch.cluster.metadata.Mappingmetadata@8cb3deb3}
// {user={"index.creation_date":"1638348829779","index.number_of_replicas":"1","index.number_of_shards":"1","index.provided_name":"user","index.uuid":"VrJIUa6OSGS1-pNQElAVSQ","index.version.created":"7080099"}}
删除索引
// 删除索引
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);

// 响应状态
System.out.println(response.isAcknowledged());
文档操作 创建文档&全量更新文档
// 插入数据
User user = new User();
user.setName("张三");
user.setAge(40);
user.setSex("男");

// 向ES中插入数据,必须将数据转成JSON
ObjectMapper mapper = new ObjectMapper();
String userJson = mapper.writevalueAsString(user);


IndexRequest request = new IndexRequest();
request.index("user")
    .id("1001")
    .source(userJson, XContentType.JSON);

IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);

System.out.println(response.getResult()); // CREATED, 更新时为UPDATED
修改文档
// 修改数据
UpdateRequest request = new UpdateRequest();
request.index("user")
    .id("1001")
    .doc(XContentType.JSON, "sex", "女");

UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);

System.out.println(response.getResult()); // UPDATED

esClient.close();
查询文档
// 查询数据
GetRequest request = new GetRequest();
request.index("user")
    .id("1001");

GetResponse response = esClient.get(request, RequestOptions.DEFAULT);

System.out.println(response.getSourceAsString());
// {"name":"张三","sex":"女","age":40}
删除文档
// 删除数据
DeleteRequest request = new DeleteRequest();
request.index("user")
    .id("1001");

DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);

System.out.println(response.getResult()); // DELETED
批量新增
// 批量增加数据
BulkRequest request = new BulkRequest();

request.add(new IndexRequest().index("user").id("10001").source(XContentType.JSON, "name", "张三"));
request.add(new IndexRequest().index("user").id("10002").source(XContentType.JSON, "name", "李四"));
request.add(new IndexRequest().index("user").id("10003").source(XContentType.JSON, "name", "王五"));
request.add(new IndexRequest().index("user").id("10004").source(XContentType.JSON, "name", "赵柳"));

BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);

System.out.println(response.getTook());
System.out.println(response.getItems());
批量删除
// 批量删除数据
BulkRequest request = new BulkRequest();

request.add(new DeleteRequest().index("user").id("10001"));
request.add(new DeleteRequest().index("user").id("10002"));
request.add(new DeleteRequest().index("user").id("10003"));
request.add(new DeleteRequest().index("user").id("10004"));

BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);

System.out.println(response.getTook());
System.out.println(response.getItems());
查询操作
// 全量查询:matchAllQuery
SearchRequest request = new SearchRequest();
request.indices("user");

request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

SearchHits hits = response.getHits();

System.out.println(hits.getTotalHits());
System.out.println(response.getTook());

for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 6 hits
// 39ms
// {"name":"张三","sex":"男","age":30}
// {"name":"李四","sex":"男","age":40}
// {"name":"王五","sex":"女","age":50}
// {"name":"赵柳","sex":"女","age":60}
// {"name":"张三1","sex":"男","age":30}
// {"name":"张1三","sex":"男","age":30}

//

// 条件查询:termQuery
SearchRequest request = new SearchRequest();
request.indices("user")
    .source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 30)));

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 分页查询
SearchRequest request = new SearchRequest();

SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// from = (pageNumber - 1) * size
builder.from(0).size(2);

request.indices("user")
    .source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 查询排序
SearchRequest request = new SearchRequest();

SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);

request.indices("user")
    .source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 过滤字段
SearchRequest request = new SearchRequest();

SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes = {};       // 不要的
String[] includes = {"name"}; // 要的
builder.fetchSource(includes, excludes);

request.indices("user")
    .source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 组合查询
SearchRequest request = new SearchRequest();

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//        boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));
//        boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));
boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "男"));
boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "女"));

SearchSourceBuilder builder = new SearchSourceBuilder().query(boolQueryBuilder);

request.indices("user")
    .source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 范围查询
SearchRequest request = new SearchRequest();

RangeQueryBuilder queryBuilder = QueryBuilders.rangeQuery("age");
queryBuilder.gte(30).lte(40);

SearchSourceBuilder builder = new SearchSourceBuilder().query(queryBuilder);

request.indices("user").source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 模糊查询
SearchRequest request = new SearchRequest();

// fuzziness(偏差的距离)
FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("name", "张三").fuzziness(Fuzziness.ONE);

SearchSourceBuilder builder = new SearchSourceBuilder().query(fuzziness);

request.indices("user").source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
// {"name":"张三","sex":"男","age":30}
// {"name":"张三1","sex":"男","age":30}
// {"name":"张1三","sex":"男","age":30}

//

// 高亮查询
SearchRequest request = new SearchRequest();

TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "张三");

HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("");
highlightBuilder.postTags("");
highlightBuilder.field("name");

SearchSourceBuilder builder = new SearchSourceBuilder().query(termQueryBuilder).highlighter(highlightBuilder);

request.indices("user").source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 聚合查询
SearchRequest request = new SearchRequest();

AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");

SearchSourceBuilder builder = new SearchSourceBuilder().aggregation(aggregationBuilder);

request.indices("user").source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

//

// 分组查询
SearchRequest request = new SearchRequest();

AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");

SearchSourceBuilder builder = new SearchSourceBuilder().aggregation(aggregationBuilder).size(0);

request.indices("user").source(builder);

SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号