es的一些操作:
1.es的一些操作
@Autowired.
private RestHighLevelClient restHighLevelClient.
删除一条索引下的所有数据
DeleteByQueryRequest deleteByQueryRequest =
new DeleteByQueryRequest();
deleteByQueryRequest.setRefresh(true);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
//指定存在该索引下的字段
boolQueryBuilder.must(QueryBuilders.existsQuery("home"));
deleteByQueryRequest.setQuery(boolQueryBuilder);
//索引
deleteByQueryRequest.indices("hangzhou_hongwuyue_801");
deleteByQueryRequest.types(EsDicIndexUtil.FULL_TEXT);
restHighLevelClient.deleteByQuery(deleteByQueryRequest,
RequestOptions.DEFAULT);
查询一条索引下的所有/部分数据
//创建Request
SearchRequest searchRequest = new SearchRequest();
searchRequest.types(EsDicIndexUtil.FULL_TEXT);
//索引集合
searchRequest.indices(idEsSet.toArray(new String[idEsSet.size()]));
//指定查询条件
SearchSourceBuilder searchSourceBuilder =
new SearchSourceBuilder();
//查询全部
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
//查询部分
searchSourceBuilder.query(QueryBuilders.matchQuery
("province", "黑龙江"));
//查询部分(前缀查询)
searchSourceBuilder.query(QueryBuilders.prefixQuery
("city", "杭州"));
//查询部分(模糊查询,并指定前两个字不允许出错)
searchSourceBuilder.query(QueryBuilders.fuzzyQuery
("city", "杭州啦啦啦啦啦").prefixLength(2));
//查询部分(类似Mysql中的like,在字符串中指定通配符* 和占位符?)
searchSourceBuilder.query(QueryBuilders.
wildcardQuery("city", "杭*"));
//查询范围(gt 大于 gte 大于等于 lt 小于 lte 小于等于)
searchSourceBuilder.query(QueryBuilders.
rangeQuery("girlFriend").lte(10).gte(5));
//查询(手写正则)
searchSourceBuilder.query(QueryBuilders.
regexpQuery("iphone", "139[0-9]{8}"));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//查询省份是杭州或黑龙江(should -> 相当于or)
boolQueryBuilder.should(QueryBuilders.
termQuery("province", "杭州"));
boolQueryBuilder.should(QueryBuilders.
termQuery("province", "黑龙江"));
//查询不是男的
boolQueryBuilder.mustNot(QueryBuilders.termQuery("xb", 1));
//查询smsContent包含西湖和良渚 (must -> 相当于 and)
boolQueryBuilder.must(QueryBuilders.matchQuery("smsContent", "西湖"));
boolQueryBuilder.must(QueryBuilders.matchQuery("smsContent", "良渚"));
//过滤
boolQueryBuilder.filter(QueryBuilders.
termQuery("corpName", "西湖白娘子"));
boolQueryBuilder.filter(QueryBuilders.
rangeQuery("fee").lte(5));
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.size(10000);
//指定查询字段
searchSourceBuilder.fetchSource(new String[]{"City","Name"}
,null);
//去重操作 (" 需要去重的字段")
searchSourceBuilder.collapse(new CollapseBubilder("value"));
searchRequest.source(searchSourceBuilder);
//执行查询
SearchResponse searchResponse = restHighLevelClient.
search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchHits = searchResponse.getHits();
searchHits .forEach( searchHit -> {
String sourceAsString =searchHit.getSourceAsString();
JSONObject jsonObject =JSON.parseObject(sourceAsString);
//操作数据
});
判断索引是否存在
GetIndexRequest getIndexRequest =new GetIndexRequest();
String indexName ="name";
getIndexRequest.indices(indexName);
boolean exists = restHighLevelClient.indices().
exists(getIndexRequest, RequestOptions.DEFAULT);
es桶查询
(单层)
public List<TaskUserObjRelatedVO> queryTaskUserObjRelated(TaskWorkLogPageDto entityDto)
{
List<TaskUserObjRelatedVO> relatedVOList = Lists.newArrayList();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.filter(QueryBuilders.termQuery("deleted", "0"));
boolQueryBuilder.filter(QueryBuilders.termsQuery("taskId", entityDto.getTaskIds()));
boolQueryBuilder.filter(QueryBuilders.termsQuery("executorIds", entityDto.getUserIdLists()));
AggregationBuilder ab = AggregationBuilders.terms("executorIdsTerms")
.field("executorIds.keyword")
.size(BUCKET_MAX);
或者
BoolQueryBuilder boolQueryBuilder1 =new BoolQueryBuilder();
boolQueryBuilder1.filter(QueryBuilders.termsQuery("status,Lists.newArrayList(1,3)));
AggregationBuilder ab = AggregationBuilders.filter("statusAgg",boolQueryBuilder1");
取值时:Filter statusAgg =searchResponse.getAggregations.get("statusAgg");
long finish =statusAgg.getDocCount();
SearchSourceBuilder sb = new SearchSourceBuilder();
sb.query(boolQueryBuilder);
sb.aggregation(ab);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(EsDicIndexUtil.getTaskObjectLogIndex(entityDto.getTaskIds()));
searchRequest.types(EsDicIndexUtil.FULL_TEXT);
searchRequest.source(sb);
try
{
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Terms terms = response.getAggregations().get("executorIdsTerms");
for (Terms.Bucket bucket : terms.getBuckets())
{
TaskUserObjRelatedVO objRelatedVO = new TaskUserObjRelatedVO();
for (String userId : entityDto.getUserIdLists())
{
if (userId.equals(bucket.getKeyAsString()))
{
objRelatedVO.setUserId(Long.valueOf(bucket.getKeyAsString()));
Long docCount = bucket.getDocCount();
objRelatedVO.setObjCount(docCount.intValue());
relatedVOList.add(objRelatedVO);
}
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
return relatedVOList;
}
es桶查询
(双层)
public List<JSONObject> queryDeptGuidancebyObjectId(Map<String, Collection<Integer>> map,
Map<String, List<String>> ysidgxdwMap, List<String> deptCodeList)
{
MultiSearchRequest multiSearchRequest = new MultiSearchRequest();
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
boolQueryBuilder1.filter(QueryBuilders.termsQuery("status", Lists.newArrayList(1, 3)));
List<String> searchObjectIdList = Lists.newArrayList();
for (String key : map.keySet())
{
List list = (List) map.get(key);
if (CollectionUtils.isEmpty(list))
{
continue;
}
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.filter(QueryBuilders.termQuery("deleted", "0"));
boolQueryBuilder.filter(QueryBuilders.termsQuery("taskId", list));
boolQueryBuilder.filter(QueryBuilders.termQuery("objectSourceId", key));
boolQueryBuilder.filter(QueryBuilders.termsQuery("executeDeptCode", deptCodeList));
if (Objects.nonNull(ysidgxdwMap) && ysidgxdwMap.containsKey(key))
{
//任务链字段
boolQueryBuilder.filter(QueryBuilders.termsQuery("objectId", ysidgxdwMap.get(key)));
}
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.aggregation(
AggregationBuilders.terms("executeDeptCode").field("executeDeptCode").size(MAX_SIZE).subAggregation(
AggregationBuilders.filter("statusAgg", boolQueryBuilder1)));
SearchRequest searchRequest = new SearchRequest().indices(EsDicIndexUtil.getTaskObjectLogIndex(list))
.types(EsDicIndexUtil.FULL_TEXT);
searchRequest.source(searchSourceBuilder);
multiSearchRequest.add(searchRequest);
searchObjectIdList.add(key);
}
if (CollectionUtils.isEmpty(searchObjectIdList))
{
return Lists.newArrayList();
}
MultiSearchResponse multiSearchResponse = queryMElasticSearch(multiSearchRequest);
int i = 0;
List<JSONObject> resList = Lists.newArrayList();
for (String key : searchObjectIdList)
{
JSONObject object = new JSONObject();
object.put("key", key);
MultiSearchResponse.Item item = multiSearchResponse.getResponses()[i];
SearchResponse searchResponse = item.getResponse();
Terms terms = searchResponse.getAggregations().get("executeDeptCode");
if (!ObjectUtils.isEmpty(terms))
{
Map<String, Map<String, Integer>> deptMap = Maps.newHashMap();
for (Terms.Bucket bucket : terms.getBuckets())
{
String deptKey = bucket.getKeyAsString();
Map<String, Integer> mapCount = Maps.newHashMap();
// 指导数
Integer instructCount = Long.valueOf(bucket.getDocCount()).intValue();
// 完成数
Filter statusAgg = bucket.getAggregations().get("statusAgg");
Integer finishCount = Long.valueOf(statusAgg.getDocCount()).intValue();
mapCount.put("finishCount", finishCount);
mapCount.put("instructCount", instructCount);
deptMap.put(deptKey, mapCount);
}
object.put("executeDeptCode", deptMap);
}
else
{
object.put("executeDeptCode", Maps.newHashMap());
}
resList.add(object);
i++;
}
return resList;
}
public MultiSearchResponse queryMElasticSearch(MultiSearchRequest multiSearchRequest)
{
MultiSearchResponse searchResponse = null;
try
{
searchResponse = client.msearch(multiSearchRequest, RequestOptions.DEFAULT);
}
catch (IOException e)
{
e.printStackTrace();
}
return searchResponse;
}
匹配多个字段
(双层)
BoolQueryBuilder boolQueryBuilder =new BoolQueryBuilder ();
boolQueryBuilder .filter(QueryBuilders.termQuery("deletef",0)); ^^
BoolQueryBuilder builder =new BoolQueryBuilder ();-------------------------------
builder.should(QueryBuilders.termQuery("labelObjectSourceId",controId));---------
builder.should(QueryBuilders.termQuery("objectSourecId",controId)); -------------
boolQueryBuilder.must(builder);-------------------------^^----------------------