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

源码请拿走:用Elasticsearch完成视频检索(有详细注释,学习可用)

源码请拿走:用Elasticsearch完成视频检索(有详细注释,学习可用)

@Service
public class SearchServiceImpl implements SearchService {

    @Autowired
    RestHighLevelClient restHighLevelClient;

   
    @Override
    public Map searchVideos(String q, Integer page, Integer per_page) throws IOException {
        //创建搜索请求
        SearchRequest searchRequest = new SearchRequest("yingxue");
        //创建搜索对象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        searchSourceBuilder.query(QueryBuilders.termQuery("title", q))
                .from((page - 1) * per_page)  //设置起始条数
                .size(per_page)  //设置每页展示条数
                .highlighter(new HighlightBuilder()  //设置高亮
                        .field("*")    //设置匹配字段为全部匹配
                        .requireFieldMatch(false)    //设置关闭字段匹配
                        .preTags("")  //前置标签
                        .postTags("")   //后置标签
                );
        //指定检索的类型、条件source
        searchRequest.types("video").source(searchSourceBuilder);
        //执行搜索
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        ArrayList> list = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()){
            Map sourceAsMap = hit.getSourceAsMap();
            list.add(sourceAsMap);
        }
        //解析结果
        ArrayList> list = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            //解析高亮的字段
            Map highlightFields = hit.getHighlightFields();
            //获取高亮字段
            HighlightField title = highlightFields.get("title");
            //原结果
            Map sourceAsMap = hit.getSourceAsMap();
            //将原来的字段换为我们高亮的字段
            if(title!=null){
                Text[] fragments = title.fragments();
                StringBuilder n_title= new StringBuilder();
                for (Text text:fragments){
                    n_title.append(text);
                }
                sourceAsMap.put("title", n_title.toString());//高亮字段替换原来的内容
            }
            list.add(sourceAsMap);
        }
        //返回查询总记录数
        Integer total= Math.toIntExact(searchResponse.getHits().getTotalHits());
        HashMap map = new HashMap<>();
        map.put("total_count", total);
        map.put("items", list);
        return map;
    }
}

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

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

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