程序地带

elasticsearchTemplate 根据id主键进行操作


1. 主要代码
1.1 查询
/**
* 根据ID批量查询数据
*
* @param index 数据所在索引
* @param ids id清单
* @author: leiming5
*/
@Override
public List<ProcessEsVo> queryBatch(String index, List<String> ids) {
Client client = elasticsearchTemplate.getClient();
//新建查询
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("_id", ids);
searchRequestBuilder.setQuery(termsQuery);
SearchResponse response = searchRequestBuilder.get();
// 返回搜索结果
SearchHits searchHits = response.getHits();
return getProcessHitList(searchHits);
}
/**
* 分页查询
*/
public List<QesDocumentVo> getDocumentByIdList(List<String> docIdList) {
List<QesDocumentVo> qesDocumentVoList = Lists.newArrayList();
if (CollectionUtils.isEmpty(docIdList)) {
return qesDocumentVoList;
}
SearchRequestBuilder searchRequestBuilder = initBaseRequestBuilder();
searchRequestBuilder.setFrom(0).setSize(1000);
searchRequestBuilder.setQuery(QueryBuilders.termsQuery("_id", docIdList));
SearchResponse response = searchRequestBuilder.get();
// 返回搜索结果
SearchHits hits = response.getHits();
if (hits.getTotalHits() <= 0) {
return qesDocumentVoList;
}
return getHitList(hits);
}
1.2 删除
/**
* 通过主数据id,删除es中的数据
*
* @param index 主数据索引
* @param id 主数据id
* @author: leiming5
*/
@Override
public void deleteByIndexAndSubjectId(String index, Long id) {
List<String> list = Arrays.asList("question", "quality_college", "definition", "bms");
if (!list.contains(index)) {
return;
}
EsEnum esEnum = EsEnum.getByIndexName(index);
elasticsearchTemplate.delete(index, esEnum.getType(), String.valueOf(id));
}
/**
* 根据ID批量删除指定索引数据
*
* @param index 删除数据所在索引
* @param docType 删除数据文档类型
* @param ids 待删除id清单
*/
@Override
public void batchDelete(String index, String docType, List<String> ids) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
Client client = elasticsearchTemplate.getClient();
BulkRequestBuilder bulkRequestBuilder = elasticsearchTemplate.getClient().prepareBulk();
for (String docId : ids) {
bulkRequestBuilder.add(client.prepareDelete(index, docType, docId));
}
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
if (bulkResponse.hasFailures()) {
log.error(bulkResponse.buildFailureMessage());
}
}
/**
* 按指定Query条件删除ES数据。
*
* @param index 删除数据所在索引
* @param docType 删除数据文档类型
* @param field 字段名称
* @param value 匹配的值
*/
@Override
public void deleteByQuery(String index, String docType, String field, List<String> value) {
DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setIndex(index);
deleteQuery.setType(docType);
deleteQuery.setQuery(QueryBuilders.termsQuery(field, value));
elasticsearchTemplate.delete(deleteQuery);
}
1.3 修改
@SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public Integer updateFieldByLLCenter(Long id, Long viewCount) {
//根据 任务id分组进行求和
Client client = elasticsearchTemplate.getClient();
//对应的es的索引库
String index = "ll_center";
String type = "center";
JSONObject jsonObject = new JSONObject();
jsonObject.put("viewcount", viewCount + 1L);
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index(index);
updateRequest.type(type);
updateRequest.id(id.toString());
updateRequest.doc(jsonBuilder().startObject().field("viewcount", viewCount + 1L).endObject());
RestStatus status = client.update(updateRequest).actionGet().status();
return status.getStatus();
}
2 相关代码
private List<ProcessEsVo> getProcessHitList(SearchHits hits) {
List<ProcessEsVo> list = Lists.newArrayList();
if (hits != null || hits.getTotalHits() != 0) {
for (SearchHit searchHit : hits) {
list.add(convertSearchHit2Vo(searchHit, ProcessEsVo.class));
}
}
return list;
}
private <T extends BaseESVo> T convertSearchHit2Vo(SearchHit searchHit, Class<T> clazz) {
JSONObject jsonObject = JSON.parseObject(searchHit.getSourceAsString());
jsonObject.put("id", searchHit.getId());
if (MapUtils.isNotEmpty(searchHit.getHighlightFields())) {
searchHit.getHighlightFields().forEach((k, v) -> {
String hight = "";
for (Text text : v.getFragments()) hight += text.string();
setJsonProperty(jsonObject, v.getName(), hight);
});
}
return JSONObject.toJavaObject(jsonObject, clazz);
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/leinminna/article/details/111246351

随机推荐

C语言能够被替换吗?

【编者按】C语言真的很老了,而且事实证明他在很多地方都已经不再是最佳选择。为了使工作更加轻松,无数的开发者都想着寻找一种新的语言取代C的位置。那么,什么样的语...

CSDN资讯 阅读(737)

10分钟看懂 Java NIO 底层原理

写在前面很多的小伙伴,被javaIO模型,搞得有点儿晕,一会儿是4种模型,一会儿又变成了5种模型。很多的小伙伴,也被nio这个名词...

公众号:肉眼品世界 阅读(132)

亲测好用的 K8s & DevOps 工具

点击上方“肉眼品世界”,选择“设为星标”回复“666”,与1000名CTO同行Kubernetes的出现不仅主宰了容器编排的市场,也进化了过去的运维方式&#x...

公众号:肉眼品世界 阅读(862)

别再问我MySQL和Python怎么操作MySQL了!

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python推荐来源:Python之王 作者:小senOne old ...

简说Python 阅读(951)

有了这份速查手册,还怕Python学不会?

科技飞速发展的今天,企业对候选人有了更新更高的要求。行业竞争越来越大,能够给产品带来价值增长的职业,例如,运营人员、市场策划、数据分析师...

简说Python 阅读(882)

Python|用切片删除字符串中的首尾空格

欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。欢迎加入团队圈...

算法与编程之美 阅读(453)

编程知识比拼第六场丨编程考试

上期考试答案及解析:1、D解析:A、read_csv()只用于读取CSV文件;      C、read_excel?是用于查看关于read_excel的帮助文...

无双. 阅读(987)