elasticsearch RestHighLevelClient基础使用

配置关联elasticsearch 

  elasticsearch:
    rest:
      uris: 127.0.0.1:9200

批量新增接口

    // 配置rest高级客户端
    @Autowired
    private RestHighLevelClient restHighLevelClient;

    public boolean saveKnowLedge(List<DataKnowledgeDocument> params) throws Exception {
        // 创建批量请求
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        params.stream().forEach(o->{
            bulkRequest.add(
                    // IndexRequest 为添加 update 为更新 delete删除 不一一演示
                    new IndexRequest(INDEX_NAME)
                            .source(JSON.toJSONString(o), XContentType.JSON)
            );
        });
         //   请求
        BulkResponse bulkItemResponses = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return !bulkItemResponses.hasFailures();
    }

通过查询返回高亮结果

public BasePageDTO<List<KnowledgeListDTO>> listPage(TDataKnowledgeListParams params) {
        BasePageDTO<List<KnowledgeListDTO>> pageDTO = new BasePageDTO<>();
        List<KnowledgeListDTO> dtoList = new ArrayList<>();
        // 条件搜索
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // 分页
        sourceBuilder.from(params.getPageNum()-1);
        sourceBuilder.size(params.getPageSize());

        // 精确匹配

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        sourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.termQuery("categoryType",params.getCategoryType())));
        sourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.matchQuery("content",params.getContent())));

        // 高亮查询
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("content");
        // 多个高亮显示 目前为关闭
        highlightBuilder.requireFieldMatch(false);
        highlightBuilder.preTags("<span style = 'color:red'>");
        highlightBuilder.postTags("</span>");
        sourceBuilder.highlighter(highlightBuilder);
        // 时间倒叙
        sourceBuilder.sort(new FieldSortBuilder("createTime").order(SortOrder.DESC));
        // 执行搜索
        searchRequest.source(sourceBuilder);
        try {
            //解析结果
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
            for (SearchHit hit :searchResponse.getHits().getHits()){
                KnowledgeListDTO dto = JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()),
                        KnowledgeListDTO.class);
                dto.setEsId(hit.getId());
                // 高亮出参
                Map<String, HighlightField> KnowledgeListDTOMap = hit.getHighlightFields();
                HighlightField content = KnowledgeListDTOMap.get("content");
                if (content != null){
                    Text[] fragment = content.fragments();
                    String n_content = "";
                    for (Text text : fragment){
                        n_content += text;
                    }
                    dto.setContent(n_content);
                }
                dtoList.add(dto);
            }
            pageDTO.setTotal(searchResponse.getHits().getTotalHits().value);
        } catch (IOException e) {
            e.printStackTrace();
        }
        pageDTO.setRows(dtoList);
        return pageDTO;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值