es高亮检索

//2、从索引库获取数据实现搜索功能
public ResponseResult search(String keywords,int pageNo,int pageSize) throws IOException {
    if (pageNo<=1){
        pageNo=1;
    }

    //条件搜索
    SearchRequest goods = new SearchRequest("ceshi");
    SearchSourceBuilder builder = new SearchSourceBuilder();
    //分页
    builder.from(pageNo);
    builder.size(pageSize);

    TermQueryBuilder title = QueryBuilders.termQuery("content", keywords);
    builder.query(title);
    builder.timeout(new TimeValue(60, TimeUnit.SECONDS));

    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.field("content");//高亮的字段
    highlightBuilder.requireFieldMatch(false);//是否多个字段都高亮
    highlightBuilder.preTags("<span style='color:red'>");//前缀后缀
    highlightBuilder.postTags("</span>");
    builder.highlighter(highlightBuilder);

    //执行搜索
    goods.source(builder);
    SearchResponse search = client.search(goods, RequestOptions.DEFAULT);
    //解析结果
    ArrayList<Map<String,Object>> list = new ArrayList<>();
    for (SearchHit hit : search.getHits().getHits()) {
        //解析高亮的字段
        //获取高亮字段
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        System.out.println("=========="+highlightFields);
        HighlightField content = highlightFields.get("content");
        System.out.println("==content=="+content);
        Map<String, Object> sourceAsMap = hit.getSourceAsMap();//原来的结果
        //将原来的字段替换为高亮字段即可
        if (content!=null){
            Text[] fragments = content.fragments();
            String newTitle = "";
            for (Text text : fragments) {
                newTitle +=text;
            }
            sourceAsMap.put("content",newTitle);//替换掉原来的内容
        }
       list.add(sourceAsMap);
    }
    return ResponseResult.success("搜索成功").setData(list);

}
posted @ 2022-04-24 12:44  MaskerFan  阅读(981)  评论(0)    收藏  举报