600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ElasticSearch实现高亮 范围查询和多条件组合查询(java和kibana)

ElasticSearch实现高亮 范围查询和多条件组合查询(java和kibana)

时间:2022-02-07 10:26:39

相关推荐

ElasticSearch实现高亮 范围查询和多条件组合查询(java和kibana)

ElasticSearch客户端配置参考之前的博客

1.高亮

高亮的本质其实是将搜索结果中需要高亮的字段进行替换

public List<Map<String,Object>> searchHighLight(String keyWord,int currentPage,int pageSize) throws Exception{List<Map<String, Object>> list = new ArrayList<>();if(currentPage <= 1){currentPage = 1;}//未处理最大页数SearchRequest searchRequest = new SearchRequest("index_one");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name",keyWord);searchSourceBuilder.query(termQueryBuilder).from((currentPage-1)*pageSize).size(pageSize);HighlightBuilder highlightBuilder = new HighlightBuilder();//对name字段进行高亮显示highlightBuilder.field("name");//高亮的样式设置highlightBuilder.preTags("<font color='red'>");highlightBuilder.postTags("</font>");//添加高亮设置searchSourceBuilder.highlighter(highlightBuilder);searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] searchHits = searchResponse.getHits().getHits();for(SearchHit hit : searchHits){//从这里可以看出可以设置多个字段进行高亮Map<String, HighlightField> map = hit.getHighlightFields();//高亮字段HighlightField name = map.get("name");//原本的搜索结果Map<String,Object> sourceAsMap = hit.getSourceAsMap();//所谓高亮就是将原本的搜索结果中需要高亮的字段进行替换String n_name = "";if(name !=null){Text[] texts = name.fragments();for(Text text : texts){n_name +=text;}}//高亮字段替换sourceAsMap.put("name",n_name);list.add(sourceAsMap);}return list;}

2.范围查询

/****** 范围查询* 每一个文档是一个map***GET /index_one/_doc/_search* {* "query":{*"range":{* "price":{* "gte":50,* "lte":100* }*}* },* "from":0,* "size":20* }*** {* "took" : 1,* "timed_out" : false,* "_shards" : {*"total" : 1,*"successful" : 1,*"skipped" : 0,*"failed" : 0* },* "hits" : {*"total" : {* "value" : 16,* "relation" : "eq"*},*"max_score" : 1.0,*"hits" : [* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "2",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义 第5版 附光盘 李刚 java语言教材计算机书教程Java8语言 疯狂Java讲义 第5版 附光盘 李刚 java语言教材计算机书教程Java8语言",* "price" : 68.1* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "6",* "_score" : 1.0,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 62.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "7",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第5版)(含DVD光盘一张) 博库神券狂潮~专题内满65减50,满125减100,更有9.9元秒杀套装等你来抢~点击进入",* "price" : 70.47* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "8",* "_score" : 1.0,* "_source" : {* "name" : "疯狂JAVA讲义(第5版)(含DVD光盘一张) 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 81.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "10",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第5版)(博文视点出品) 荣获“文津图书奖”“中国好书”的典藏级国民地理书《这里是中国》第2部。百年重塑山河,建设改变中国!",* "price" : 67.9* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "13",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java面试讲义 数据结构、算法与技术素养 图书 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 62.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "15",* "_score" : 1.0,* "_source" : {* "name" : "官方正版 疯狂Java讲义 第5版含DVD光盘一张 李刚 java语言程序设计 计算机自学教程书籍 官方正版 疯狂Java讲义 第5版含DVD光盘一张 李刚 java语言程序设计 计算机自学教程书籍",* "price" : 76.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "17",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第3版)(含光盘) ava从入门到精通 java编程思想java核心技术 新华书店,正版保证,关注店铺领取专属优惠,双旦季遇礼,全场满就送点击进入",* "price" : 65.4* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "18",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(附光盘第4版疯狂软件教育标准教材) 疯狂Java讲义(附光盘第4版疯狂软件教育标准教材)",* "price" : 60.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "19",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(附光盘第3版疯狂软件教育标准教材)Java经典畅销书全面升级 团购批发价格从优请联系客服,博库神券狂潮~专题内满125减100,满65减50,优惠套装等你来抢~点击进入",* "price" : 81.75* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "20",* "_score" : 1.0,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 82.8* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "21",* "_score" : 1.0,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 82.8* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "23",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第4版) 低价悦读名家杂文、小说。点击查看更多",* "price" : 51.23* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "25",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第5版)(含DVD光盘一张) 疯狂Java讲义(第5版)(含DVD光盘一张)",* "price" : 86.3* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "28",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义第5版含DVD一张 疯狂Java讲义第5版含DVD一张",* "price" : 77.2* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "29",* "_score" : 1.0,* "_source" : {* "name" : "疯狂Java讲义(第5版)(含DVD光盘一张) 疯狂Java讲义(第5版)(含DVD光盘一张)",* "price" : 86.3* }* }*]* }* }*** @param min 最小价格* @param max 最大价格* @return*/public List<Map<String,Object>> queryRange(int min,int max) throws Exception{List<Map<String,Object>> list = new ArrayList<>();SearchRequest searchRequest = new SearchRequest("index_one");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//构建组合查询对象//from默认为0,size默认为10, 所以总共16条,返回了10条RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("price");rangeQueryBuilder.gte(min).lte(max);//searchSourceBuilder.query(rangeQueryBuilder)searchSourceBuilder.query(rangeQueryBuilder).from(0).size(20);searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit : hits){Map<String,Object> map = hit.getSourceAsMap();list.add(map);}return list;}

3.多条件组合查询(must)

/*** 多条件组合查询*** GET /index_one/_doc/_search* {* "query":{*"bool":{* "must":[* {"term":{* "name":"关注"* }},* {* "range":{* "price":{*"gte":50,*"lte":100* }* }* }* ]*}* }* }**** {* "took" : 4,* "timed_out" : false,* "_shards" : {*"total" : 1,*"successful" : 1,*"skipped" : 0,*"failed" : 0* },* "hits" : {*"total" : {* "value" : 6,* "relation" : "eq"*},*"max_score" : 2.3121393,*"hits" : [* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "6",* "_score" : 2.3121393,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 62.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "20",* "_score" : 2.3121393,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 82.8* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "21",* "_score" : 2.3121393,* "_source" : {* "name" : "疯狂JAVA讲义 第四版 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 82.8* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "8",* "_score" : 2.2545283,* "_source" : {* "name" : "疯狂JAVA讲义(第5版)(含DVD光盘一张) 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 81.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "13",* "_score" : 2.2409074,* "_source" : {* "name" : "疯狂Java面试讲义 数据结构、算法与技术素养 图书 新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!",* "price" : 62.5* }* },* {* "_index" : "index_one",* "_type" : "_doc",* "_id" : "17",* "_score" : 2.1892588,* "_source" : {* "name" : "疯狂Java讲义(第3版)(含光盘) ava从入门到精通 java编程思想java核心技术 新华书店,正版保证,关注店铺领取专属优惠,双旦季遇礼,全场满就送点击进入",* "price" : 65.4* }* }*]* }* }****** @param keyWord 关键字* @param min 价格最小* @param max 价格最大* @return*/public List<Map<String,Object>> rangeTermQuery(String keyWord,int min,int max) throws Exception{SearchRequest searchRequest = new SearchRequest("index_one");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name",keyWord);RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("price").gte(min).lte(max);boolQueryBuilder.must(termQueryBuilder).must(rangeQueryBuilder);searchSourceBuilder.query(boolQueryBuilder);searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);SearchHit[] searchHits = searchResponse.getHits().getHits();List<Map<String,Object>> list = new ArrayList<>();for(SearchHit hit : searchHits){list.add(hit.getSourceAsMap());}return list;}

4.总结

(1)在使用Java客户端操作Es时,个人感觉先在kibana中用语法进行测试,然后再通过Java代码实现,根据语法的层级关系,可以很容易地写出代码

(2)查询的分页是有默认值的,from默认值为0,size的默认值为10,所以在不设置分页的情况下,默认返回10条数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。