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);}
此部分旧完了,如有错误,不足之处,望指正,多谢。

原创粉丝点击