elasticsearch5.4.0 java开发记录四
来源:互联网 发布:java零基础骗局 编辑:程序博客网 时间:2024/06/05 16:53
本篇主要用来介绍下接单查询:
获取执行查询的API
获取elasticsearch 客户端:第一篇中已讲述,下面是java代码:
1,简单查询
TermQueryBuilder query = QueryBuilders.termQuery(ProductInfoEnum.PRODUCTSN.getName(), productSn); 第一个参数是 索引中字段名变量,第二个字段是你要进行查询的值变量
2,组合查询
BoolQueryBuilder snBooleanQuery = QueryBuilders.boolQuery(); 获得组合查询
snBooleanQuery.should(query);//组合查询中 或的关系,相当于OR
snBooleanQuery.must(query);//组合查询中并且的关系,相当于 AND
3,区间查询
RangeQueryBuilder priceQuery = QueryBuilders.rangeQuery(ProductInfoEnum.SHOWPRICE.getName()) .gte(priceStart).lte(priceEnd);
第一个变量是索引中字段名称,gte()是大于等于,ite()是小于等于 多数用来 数字,价格,时间区间进行查询;
4,进行查询
SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch(INDEX_NAME).setTypes(TYPE_NAME);
response = searchRequestBuilder
.setQuery(booleanQuery) //设置查询语句
.setFrom(0) //设置从哪里开始
.setSize(10000) //设置查询多少
.setTimeout(TimeValue.timeValueSeconds(30)) //设置查询超时时间
.get(); //执行查询
5,获取结果
SearchHits hits = response.getHits();long total = hits.getTotalHits();resultMap.put("total", total);LOGGER.info("进行查询query:【{}】,共【{}】条,共耗时:【{}】ms", booleanQuery, total,response.getTook().getMillis());for (SearchHit hit : hits) {ProductInfoVO vo = new ProductInfoVO();// System.out.println("得分:" + hit.getScore());JSONObject json = new JSONObject(hit.getSourceAsMap());vo = JSON.toJavaObject(json, ProductInfoVO.class);lists.add(vo);}------------------------------------------------------分割线-----------------------------------------------------------------------
以上是比较简单的查询
关键字查询:if (StringUtils.isNotBlank(queryVo.getKeyWords())) { String key = queryVo.getKeyWords(); BoolQueryBuilder vendorBooleanQuery = QueryBuilders.boolQuery(); MultiMatchQueryBuilder query = QueryBuilders.multiMatchQuery(key, ProductInfoEnum.BRANDCHNAME.getName(), ProductInfoEnum.BRANDENNAME.getName(), ProductInfoEnum.PRODUCTKEYWORDS.getName(), ProductInfoEnum.PRODUCTNAME.getName(), ProductInfoEnum.PRODUCTSN.getName()); vendorBooleanQuery.should(query);设置排序FieldSortBuilder sortQuery = SortBuilders.fieldSort( FieldSortEnum.PRICE.getFieldName()).order(SortOrder.DESC); 高亮 商品名称 HighlightBuilder highlightBuilder = new HighlightBuilder() .preTags("<span style=\"color:red\">").postTags("</span>") .field(ProductInfoEnum.PRODUCTNAME.getName());分组 TermsAggregationBuilder tabBrand = AggregationBuilders.terms("brand") .field(ProductInfoEnum.BRANDCODENAME.getName()).size(1000);查询SearchRequestBuilder requestBuilder = searchRequestBuilder .addSort(sortQuery) .setFrom(from) .setSize(size) .setQuery(booleanQuery) .highlighter(highlightBuilder) .addAggregation(tabBrand) .addAggregation(tabVendor) .addAggregation(firstClass); .setTimeout(TimeValue.timeValueSeconds(30)) .get();
获取高亮结果
for (SearchHit hit : hits) { ProductInfoVO vo = new ProductInfoVO(); System.out.println("得分:" + hit.getScore()); Map<String, Object> highMap = hit.getSourceAsMap(); HighlightField hightfield = hit.getHighlightFields().get( ProductInfoEnum.PRODUCTNAME.getName()); if (hightfield != null) { Text[] fragments = hightfield.fragments(); StringBuffer sbf = new StringBuffer(); for (Text t : fragments) { sbf = sbf.append(t); } highMap.put(ProductInfoEnum.PRODUCTNAME.getName(), sbf.toString()); } JSONObject json = new JSONObject(highMap); vo = JSON.toJavaObject(json, ProductInfoVO.class); lists.add(vo); }简单聚合结果:
Map<String, Aggregation> aggMap = response.getAggregations().asMap();Set<String> strKeys = aggMap.keySet();Iterator<String> ite = strKeys.iterator();while (ite.hasNext()) {String key = ite.next();StringTerms teamAgg = (StringTerms) aggMap.get(key);LOGGER.info(key + "聚合后有:" + teamAgg.getBuckets().size());Iterator<Bucket> teamBucketIt = teamAgg.getBuckets().iterator();List<FilterBean> filterBeans = new ArrayList<FilterBean>();while (teamBucketIt.hasNext()) {Bucket buck = teamBucketIt.next();String codeName = (String) buck.getKey();if (StringUtils.isNotBlank(codeName)) {String[] strs = codeName.split("\\_");long count = buck.getDocCount();if (strs.length > 1) { FilterBean fb = new FilterBean(count, strs[0], strs[1],); filterBeans.add(fb);}}}resultMap.put(key, filterBeans);}此部分旧完了,如有错误,不足之处,望指正,多谢。
- elasticsearch5.4.0 java开发记录四
- elasticsearch5.4.0 java开发记录一
- elasticsearch5.4.0 java开发记录二
- elasticsearch5.4.0 java开发记录三
- elasticsearch5.4.0 java开发注意事项
- elasticsearch5.4.0 查询记录
- solr项目中添加elasticsearch5.4.0记录
- elasticsearch5.4.0 kibana小问题记录
- 【JAVA大作业开发记录(四)】
- ElasticSearch5.0使用记录
- DM8148 开发记录 四
- elasticsearch5.1.2安装过程记录
- 菜鸟java记录四
- AM1808开发记录(四)
- IOS开发记录(四)
- Elasticsearch5.5.1插件开发指南
- 安装elasticsearch5.5遇到的问题记录
- ElasticSearch5.X聚合-条形图(四)
- c浮点数运算
- SQL DBHelper
- Timeline--Animation
- BZOJ 4196 [Noi2015]软件包管理器
- ANSIBLE的简单使用
- elasticsearch5.4.0 java开发记录四
- java内存管理
- Linux下OOM Killer机制详解(二)
- 2017/09/25 关于cache和axi的一些想法
- ???Auction Bidding
- neuq 1177: 【亲和数】
- 数据结构与算法,反转单链表的几种方法
- BZOJ 4195 [Noi2015]程序自动分析
- 1020. 月饼 (25)