Elasticsearch5.5 java api 相关操作


maven坐标

        <!--=========================ElasticSearh start============================-->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.7</version>
        </dependency>
        <!--=========================ElasticSearh end============================-->

客户端连接

@Configuration
public class ElasticsearchConfig {
    private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfig.class);
    @Value("${ElasticSearchServerIp}")
    String ElasticSearchServerIp;
    @Bean
    public TransportClient client(){
        TransportClient client = null;
        try {
            InetSocketTransportAddress node = new InetSocketTransportAddress(
                InetAddress.getByName(ElasticSearchServerIp),9300
            );
            Settings settings = Settings.builder()
                    .put("cluster.name","elasticsearch")
                    .build();
            client = new PreBuiltTransportClient(settings);
            client.addTransportAddress(node);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return client;
    }

}

更新操作

JSONObject jsonObject = new JSONObject();
jsonObject,put("key","value");
this.client.prepareUpdate("index","type",id)
             .setDoc(jsonObject.toString(), XContentType.JSON).get();

删除操作

DeleteResponse response = this.client.prepareDelete("index", "type",id).get();

查找-高亮

    @RequestMapping("/activity/conditionalQuery")
    @ResponseBody
    public Map searchByKeyWord() {
        if (StringUtils.isEmpty(keyword)) {
            return ReturnResult.errorResult("查询字段或者关键字为空");
        }
        Integer from = pageSize * (pageNum - 1);//当前页的起始偏移
        HighlightBuilder highlightBuilder = null;
        //初始化前端传来的高亮标签,如果为空,则不进行高亮
        if (StringUtils.isNotEmpty(preTags) && StringUtils.isNotEmpty(postTags)) {
            highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
            highlightBuilder.preTags(preTags);
            highlightBuilder.postTags(postTags);
        }
        SortBuilder sortBuilder = SortBuilders.fieldSort("start_time").order(SortOrder.DESC);//设置排序

        SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("huiyizhan");
        searchRequestBuilder.setTypes("activity");
        if (highlightBuilder != null) {
            searchRequestBuilder.highlighter(highlightBuilder);
        }
        String[] needHighLightFields; //高亮字段
        //手机端
        if (isMobile) {
            //手机端匹配所有字段
            MultiMatchQueryBuilder queryMobile = QueryBuilders.multiMatchQuery(keyword,culoum);
            needHighLightFields = this.culoum;
            searchRequestBuilder.setQuery(queryMobile);
            searchRequestBuilder.addSort(sortBuilder);
        } //手机端if 结束
        else {
            String fieldLine = CamelCaseUtil.toLine(field);
            //PC端
            needHighLightFields = new String[]{fieldLine};
            //设置查询-PC端
            BoolQueryBuilder shouldPC = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery(fieldLine, keyword));
            //时间条件过滤
            RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("start_time").gt("now" + range);
            //如果range字段为空,则不进行时间过滤
            if (range.indexOf("null") == -1) {
                shouldPC.should(rangeQuery);
            }
            if (isSort) {
                searchRequestBuilder.addSort(sortBuilder);
            }
            searchRequestBuilder.setFrom(from);
            searchRequestBuilder.setSize(pageSize);
            searchRequestBuilder.setQuery(shouldPC);
        }//pc端else结束

        //执行查询动作
        SearchResponse response = searchRequestBuilder.get();
        Long totalHits = response.getHits().totalHits;
        if (totalHits == 0 || response == null) {
            return ReturnResult.errorResult("查询结果不存在");
        }
        List<Map<String, Object>> res = new ArrayList<>();
        //处理数据开始for
        for (SearchHit hit : response.getHits()) {
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            Map<String, Object> source = hit.getSource();
            //处理高亮 获取高亮字符串
            if (highlightFields != null && highlightFields.size() != 0) {
                //String[] needHighLightFields = needHighLightFields;
                for (String needHighLightField : needHighLightFields) {
                    HighlightField titleField = highlightFields.get(needHighLightField);
                    if (titleField != null) {
                        Text[] fragments = titleField.fragments();
                        if (fragments != null && fragments.length != 0) {
                            StringBuilder name = new StringBuilder();
                            for (Text text : fragments) {
                                name.append(text);
                            }
                            source.put(needHighLightField, name.toString());
                        }
                    }
                }
            }
            res.add(hit.getSource());
        }//处理数据结束for
        //分页
        PageInfo pageInfo = new PageInfo(res, pageNum, pageSize, totalHits);
        return ReturnResult.successResult("data", pageInfo, ReturnType.GET_SUCCESS);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值