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

springboot2.3整合elasticsearchRestTemplate查询结果按照相关度排序问题解决方案

springboot2.3整合elasticsearchRestTemplate查询结果按照相关度排序问题解决方案

 

@Override
public PageResult fullTextSearch(Integer pageNum, Integer pageSize,
                                 Long startTime, Long endTime,
                                 String attrType,
                                 String docType, String searchKey) {

    Pageable pageable = PageRequest.of(pageNum - 1, pageSize);//es的分页是从0开始的
    NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();

    if (StringUtils.isNotBlank(searchKey)) {
        List filterFunctionBuilders = new ArrayList<>();

        filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchPhraseQuery("attr_value", searchKey),
                ScoreFunctionBuilders.weightFactorFunction(10)));
        filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchPhraseQuery("summary", searchKey),
                ScoreFunctionBuilders.weightFactorFunction(5)));
        FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders =
                new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
        filterFunctionBuilders.toArray(builders);
        FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(builders)
                .scoreMode(FunctionScoreQuery.ScoreMode.SUM)
                .setMinScore(2);
        searchQueryBuilder.withQuery(functionScoreQueryBuilder);
    }
    searchQueryBuilder.withPageable(pageable);

    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    //按照分类进行过滤查询
    if (StringUtils.isNotEmpty(attrType)) {
        //过滤精准匹配,用作查询具体的分类
        boolQueryBuilder.filter(QueryBuilders.termQuery("attr_type", attrType));
    }
    // 过滤查询
    searchQueryBuilder.withFilter(boolQueryBuilder);
    //========================过滤查询 结束=====================================
    searchQueryBuilder.withSort(SortBuilders.scoreSort().order(SortOrder.DESC));//相关性排序
    searchQueryBuilder.withSort(SortBuilders.fieldSort("update_time").order(SortOrder.DESC));//时间排序
    // 搜索条件构造器构建:NativeSearchQuery
    NativeSearchQuery searchQuery = searchQueryBuilder.build();

    log.info("DSL:{}", searchQuery.getQuery());
    SearchHits searchHits = elasticsearchRestTemplate.search(searchQuery, SummaryIndex.class);
    if(searchHits.getTotalHits()<=0){
        return null;
    }
    List summaryIndices = searchHits.stream().map(SearchHit::getContent).collect(Collectors.toList());

    com.github.pagehelper.Page page = new com.github.pagehelper.Page(pageNum, pageSize);
    //为Page类中的total属性赋值
    long total = searchHits.getTotalHits();
    page.setTotal(total);
    //从链表中截取需要显示的子链表,并加入到Page
    page.addAll(summaryIndices);
    //以Page创建PageInfo
    PageInfo pageInfo = new PageInfo<>(page);
    return PageUtils.getPageResult(pageInfo);
}

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

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

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