栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch 复杂查询 版本6

Elasticsearch 复杂查询 版本6

 一   Elasticsearch复杂查询  1.1  构建查询池
  //  构建查询池
        BoolQueryBuilder bool = QueryBuilders.boolQuery();
1.2 单字段模糊查询  或多字段模糊查询  或复合查询
        if (!StringUtils.isBlank(quaryGood.getText1())){
            if (!StringUtils.isBlank(quaryGood.getV1())){
                MatchQueryBuilder query = QueryBuilders.matchQuery(quaryGood.getText1(), quaryGood.getV1());
                bool.must(query);
            }
        }
        QueryBuilders.matchQuery("name","text");
        QueryBuilders.multiMatchQuery("text","name1","name2");

1.3 区间查询  时间需要采用毫秒来比较
        // 日期区间查询
        RangeQueryBuilder created = QueryBuilders.rangeQuery("created");
        if (null !=quaryGood.getT1()){
                created.from(quaryGood.getT1().getTime());
        }
        if (null !=quaryGood.getT2()){
            created.to(quaryGood.getT2().getTime());
        }
        bool.must(created);
        // 价格区间查询
        RangeQueryBuilder price = QueryBuilders.rangeQuery("price");
        if (null !=quaryGood.getD1()){
            price.from(quaryGood.getD1());
        }
        if (null !=quaryGood.getD2()){
            price.to(quaryGood.getD2());
        }
        bool.must(price);
1.4  高亮查询  必须在普通查询后增加该功能

首先需要一个自定义工具类

public class HighLightResultMapper implements SearchResultMapper {
    @Override
    public  AggregatedPage mapResults(SearchResponse searchResponse, Class clazz, Pageable pageable) {
        long totalHits = searchResponse.getHits().getTotalHits();//获取搜索后数据总条数
        List list = new ArrayList<>();
        SearchHits hits = searchResponse.getHits();//获取es搜索的数据集合对象
        if (hits.getHits().length> 0) {
            for (SearchHit searchHit : hits) {//遍历数据集合
                Map highlightFields = searchHit.getHighlightFields();//获取要高亮字段
                //{"id":"4","title":"出塞","content":"秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。"
                T item = JSON.parseObject(searchHit.getSourceAsString(), clazz);//把json串转为目标对象
                Field[] fields = clazz.getDeclaredFields();//获取目标对象的所有属性
                for (Field field : fields) {//遍历属性
                    field.setAccessible(true);//设置私有属性可以访问
                    if (highlightFields.containsKey(field.getName())) {//如果高亮的字段和要封装的对象的名字一致则值要重新封装
                        try {
                           // System.out.println("item:"+item);
                          //  System.out.println("highlightFields:"+highlightFields.get(field.getName()).fragments()[0].toString());
                            //出塞
                            field.set(item, highlightFields.get(field.getName()).fragments()[0].toString());
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                    }
                }
                list.add(item);
            }
        }
        return new AggregatedPageImpl<>(list, pageable, totalHits);

    }
}

对想要高亮的字段配置

 这里添加自定义的工具类和字段

 1.5  排序查询

这里用到了es自带的工具类 字符串转枚举  

SortOrder sortOrder = SortOrder.fromString(quaryGood.getSort()); SortBuilders.fieldSort("price").order(sortOrder)
        // 排序

        if (quaryGood.getSort()==null || quaryGood.getSort()==""){
            quaryGood.setSort("asc");
        }
        SortOrder sortOrder = SortOrder.fromString(quaryGood.getSort());
1.6  实现分页
        // 封装 page对象
        Page page = new Page<>(pageNum, pageSize);
        // 封装总条数
        page.setTotal(goodspage.getTotalElements());
        // 获取 pageinfo 对象 存放数据
        PageInfo info = page.toPageInfo();
        info.setList(goodspage.getContent());

        model.addAttribute("pg",info);
        model.addAttribute("quaryGood",quaryGood);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号