欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

一个elasticsearch查询demo

时间:2023-06-20

索引

{ "mappings" : { "_source" : { "includes" : [ "name", "shortname", "score", "status", "state", "classify", "province", "city", "frName", "entType", "entStatus", "regNo", "regCap", "regOrg", "authorityCode", "esDate", "tagArr" ] }, "properties" : { "authorityCode" : { "type" : "keyword", "store" : true }, "city" : { "type" : "keyword", "store" : true }, "classify" : { "type" : "keyword", "store" : true }, "entStatus" : { "type" : "keyword", "store" : true }, "entType" : { "type" : "keyword", "store" : true }, "esDate" : { "type" : "long", "store" : true }, "frName" : { "type" : "keyword", "store" : true }, "lastmodifiedtime" : { "type" : "date" }, "name" : { "type" : "text", "analyzer" : "ik_pinyin_analyzer" }, "province" : { "type" : "keyword", "store" : true }, "regCap" : { "type" : "keyword", "store" : true }, "regNo" : { "type" : "keyword", "store" : true }, "regOrg" : { "type" : "keyword", "store" : true }, "score" : { "type" : "integer", "store" : true }, "shortname" : { "type" : "text", "analyzer" : "ik_pinyin_analyzer" }, "state" : { "type" : "keyword", "store" : true }, "status" : { "type" : "integer", "store" : true }, "tagArr" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } }, "settings" : { "index" : { "routing" : { "allocation" : { "include" : { "_tier_preference" : "data_content" } } }, "number_of_shards" : "3", "max_result_window" : "10000000", "analysis" : { "filter" : { "my_pinyin" : { "lowercase" : "true", "keep_original" : "true", "remove_duplicated_term" : "true", "keep_separate_first_letter" : "false", "type" : "pinyin", "limit_first_letter_length" : "16", "keep_full_pinyin" : "true" } }, "analyzer" : { "ik_pinyin_analyzer" : { "filter" : [ "my_pinyin" ], "type" : "custom", "tokenizer" : "ik_max_word" } } }, "number_of_replicas" : "0" } }}

查询demo

public class EsTest { @Autowired private RestHighLevelClient restClient; public void esTest(Parm parm) throws IOException { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //搜索的条件 if (parm.getCondition() != null && !"".equals(parm.getCondition())) { boolQueryBuilder.must(QueryBuilders.matchQuery("name", parm.getCondition()).minimumShouldMatch("100%")); } if (parm.getProvince() != null && !"".equals(parm.getProvince())) { boolQueryBuilder.must(QueryBuilders.matchQuery("province", parm.getProvince())); } if (parm.getCity() != null && !"".equals(parm.getCity())) { boolQueryBuilder.must(QueryBuilders.matchQuery("city", parm.getCity())); } //classify 字段在classify列表中 if (parm.getIndustryCategoriesList() != null && parm.getIndustryCategoriesList().size() > 0) { boolQueryBuilder.must(QueryBuilders.termsQuery("classify", parm.getIndustryCategoriesList())); } //存在某个字段 boolQueryBuilder.must(QueryBuilders.existsQuery("tagArr")); //大于等于 小于等于 boolQueryBuilder.must(QueryBuilders.rangeQuery("score").gte(parm.getScoreBegin()).lte(parm.getScoreEnd())); searchSourceBuilder.query(boolQueryBuilder); //分页 searchSourceBuilder.from((parm.getPageNo() - 1) * parm.getPageSize()); searchSourceBuilder.size(parm.getPageSize()); //设置高亮 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("name").field("classify").preTags("").postTags("").requireFieldMatch(false); //最大高亮分片数 highlightBuilder.fragmentSize(800000); //从第一个分片获取高亮片段 highlightBuilder.numOfFragments(0); searchSourceBuilder.highlighter(highlightBuilder); HashMap resultEs = new HashMap();// SearchRequest searchRequest = new SearchRequest(ES_INDEX).types(ES_TYPE); SearchRequest searchRequest = new SearchRequest("index"); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); //获得匹配总记录 long totalHits = hits.getTotalHits().value; // 如果总数为0 就是没查到数据在es里面 就直接返回 if (totalHits == 0) { } SearchHit[] searchHits = hits.getHits(); //处理数据 for (SearchHit hit : searchHits) { String id = hit.getId(); } resultEs.put("totalCounts", totalHits); resultEs.put("totalPage", totalHits % parm.getPageSize() > 0 ? totalHits / parm.getPageSize() + 1 : totalHits / parm.getPageSize()); resultEs.put("pageNo", parm.getPageNo()); resultEs.put("pageSize", parm.getPageSize()); }}@Dataclass Parm{ public String condition; public String province; public String city; public List industryCategoriesList; public Integer scoreBegin; public Integer scoreEnd; private int pageNo; private int pageSize = 10;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。