es获取指定字段、or查询、高亮加标签

private List<TranTmESDO> getSearchTmList(List<Long> ttIds,String keywords,String lgAlias) {

        String searchLgAlias="resultMap."+lgAlias;

        BoolQueryBuilder builder = QueryBuilders.boolQuery();
        builder.must(QueryBuilders.matchQuery("deleteFlag", DeleteFlagEnum.NOT_DELETE.getValue()));
        builder.must(QueryBuilders.termsQuery("ttId",ttIds));
        builder.must(
                QueryBuilders.boolQuery()
                        .should(QueryBuilders.matchQuery("originString", keywords))
                        .should(QueryBuilders.matchQuery(searchLgAlias, keywords))
        );

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(builder);

        String leftTag = constantConfig.getTmSearchHighlightLeftTag();
        String rightTag = constantConfig.getTmSearchHighlightRightTag();

        //高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("originString");
        highlightBuilder.field(searchLgAlias);
        highlightBuilder.requireFieldMatch(true);//多个高亮显示
        highlightBuilder.preTags(leftTag);
        highlightBuilder.postTags(rightTag);
        searchSourceBuilder.highlighter(highlightBuilder);

        String[] fields=new String[]{"originLgAlias","originString","projectId","projectName","resultMap","ttId"};
        searchSourceBuilder.fetchSource(fields, null);

        SearchResult result = null;
        String queryStr = searchSourceBuilder.toString();
        String index= TablesUtils.TRAN_TM_ES;
        String type="_doc";

        try {
            Search search = new Search.Builder(queryStr)
                    .addIndex(index)
                    .addType(type)
                    .build();
            result = jestClient.execute(search);
            if (result == null) {
                return null;
            }
            if (result.getResponseCode() != 200) {
                log.error(result.getErrorMessage());
                return null;
            }

            List<TranTmESDO> returnList=new ArrayList<>();

            List<SearchResult.Hit<TranTmESDO, Void>> hits = result.getHits(TranTmESDO.class);
            hits.forEach(h->{
                Map<String, List<String>> highlight = h.highlight;
                TranTmESDO source = h.source;

                List<String> originStringList = highlight.get("originString");
                if(Objects.nonNull(originStringList)&&originStringList.size()>0){
                    source.setOriginString(originStringList.get(0));
                }

                List<String> resultMapList = highlight.get(searchLgAlias);
                if(Objects.nonNull(resultMapList)&&resultMapList.size()>0){
                    Map<String,Object> resultMap=new HashMap<>();
                    resultMap.put(lgAlias,resultMapList.get(0));
                    source.setResultMap(resultMap);
                }

                returnList.add(source);
            });


            return returnList;

        } catch (Exception e) {
            log.error("search", e);
        }

        return null;
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值