ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程 (2)

注:创建索引库的时候,一定要先判断索引库是否存在!!!
这里创建索引库的时候顺便也指定了别名(alias),这个别名是一个好东西,使用恰当可以提升查询性能,这里我们留着下次在讲。

三、修改数据

ES提供修改API的时候,有两种方式,一种是直接修改,但是若数据不存在会抛出异常,另一种则是存在更新,不存着就插入。相比第一种,第二种会更加好用一些,不过在写入速度上是不如第一种的。

ES修改的代码示例:

private static void update() throws IOException { String type = "_doc"; String index = "test1"; // 唯一编号 String id = "1"; UpdateRequest upateRequest = new UpdateRequest(); upateRequest.id(id); upateRequest.index(index); upateRequest.type(type); // 依旧可以使用Map这种集合作为更新条件 Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("uid", 12345); jsonMap.put("phone", 123456789019L); jsonMap.put("msgcode", 2); jsonMap.put("sendtime", "2019-03-14 01:57:04"); jsonMap.put("message", "xuwujing study Elasticsearch"); upateRequest.doc(jsonMap); // upsert 方法表示如果数据不存在,那么就新增一条 upateRequest.docAsUpsert(true); client.update(upateRequest, RequestOptions.DEFAULT); System.out.println("更新成功!"); }

注:upsert 方法表示如果数据不存在,那么就新增一条,默认是false。

四、删除数据

根据上述的几个操作,想必不用多说,已经知道了是DELETE方法了,那我们就直接开始吧。

ES根据ID删除代码示例:

private static void delete() throws IOException { String type = "_doc"; String index = "test1"; // 唯一编号 String id = "1"; DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.id(id); deleteRequest.index(index); deleteRequest.type(type); // 设置超时时间 deleteRequest.timeout(TimeValue.timeValueMinutes(2)); // 设置刷新策略"wait_for" // 保持此请求打开,直到刷新使此请求的内容可以搜索为止。此刷新策略与高索引和搜索吞吐量兼容,但它会导致请求等待响应,直到发生刷新 deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); // 同步删除 DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT); }

ES根据条件进行删除:

private static void deleteByQuery() throws IOException { String type = "_doc"; String index = "test1"; DeleteByQueryRequest request = new DeleteByQueryRequest(index,type); // 设置查询条件 request.setQuery(QueryBuilders.termsQuery("uid",1234)); // 同步执行 BulkByScrollResponse bulkResponse = client.deleteByQuery(request, RequestOptions.DEFAULT); } 测试结果

示例图:

查询语句

几个常用的查询API这里就简单的介绍下用法,然后再直接给出所有的查询语句代码。

查询API

等值(term查询:QueryBuilders.termQuery(name,value);

多值(terms)查询:QueryBuilders.termsQuery(name,value,value2,value3...);

范围(range)查询:QueryBuilders.rangeQuery(name).gte(value).lte(value);

存在(exists)查询:QueryBuilders.existsQuery(name);

模糊(wildcard)查询:QueryBuilders.wildcardQuery(name,+value+);

组合(bool)查询: BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

查询所有代码示例 private static void allSearch() throws IOException { SearchRequest searchRequestAll = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); searchRequestAll.source(searchSourceBuilder); // 同步查询 SearchResponse searchResponseAll = client.search(searchRequestAll, RequestOptions.DEFAULT); System.out.println("所有查询总数:" + searchResponseAll.getHits().getTotalHits()); } 一般查询代码示例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsppzj.html