SpringBoot ElasticSearch常用API

ElasticSearch常用API

ElasticSearch常用API

package com.chuang.until;

import com.alibaba.fastjson.JSON;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

/**
 * @program: Shop-Server
 * @description: 工具类
 * @author: chuang
 * @create: 2022-02-18 11:23
 */
@Component
public class ESUtil {
    @Autowired
    RestHighLevelClient restHighLevelClient;
    //创建索引
    public Boolean CreatemyIndex(String index) throws IOException {
        CreateIndexRequest createIndexRequest = new CreateIndexRequest(index);
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
        return createIndexResponse.isAcknowledged();
    }
    //判断一个索引是否存在
    public Boolean ExistIndex(String index) throws IOException {
        GetIndexRequest getIndexRequest = new GetIndexRequest(index);
        return restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
    }
    //删除索引
    public Boolean DeleteIndex(String index) throws IOException {
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(index);
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        return delete.isAcknowledged();
    }
    //添加文档
    public RestStatus AddDocument(String index, String id, Object object) throws IOException {
        //索引创建规则 put /index/_doc/id
//        CreatemyIndex("sunchuang-index");
        IndexRequest indexRequest = new IndexRequest(index);
        indexRequest.id(id);
        indexRequest.timeout(TimeValue.timeValueSeconds(2));
        indexRequest.source(JSON.toJSONString(object), XContentType.JSON);
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        RestStatus status = indexResponse.status();
        return status;   //Created 、update
    }
    // 判断文档是否存在 get /index/doc/1
    public  boolean DocumentIsExists(String index,String id) throws IOException {
        GetRequest getRequest = new GetRequest(index, id);
        //不获取返回的_source的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        return restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
    }
    //获取文档文本内容
    public Map<String, Object> GetDocument(String index,String id)throws IOException {
        GetRequest getRequest = new GetRequest(index, id);
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        return documentFields.getSource();
    }
    //获取索引下全部内容
    public GetResponse GetAllDocument(String index, String id)throws IOException {
        GetRequest getRequest = new GetRequest(index, id);
        return restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
    }

    //更新文档信息
    public RestStatus UpdateDocument(String index, String id, Object updateobject) throws IOException {
        UpdateRequest updateRequest = new UpdateRequest(index, id);
        updateRequest.timeout("2s");
        updateRequest.doc(JSON.toJSONString(updateobject),XContentType.JSON);
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        return updateResponse.status();
    }

    //删除文档记录
    public RestStatus DeleteDocument(String index, String id) throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest(index,id);
        deleteRequest.timeout("1s");
        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        return delete.status();
    }

    //批量操作
    public RestStatus BulkInsertDocument(ArrayList bulklist, String index) throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("120s");
        for (int i = 0; i < bulklist.size(); i++) {
            bulkRequest.add(new IndexRequest(index)
                    .id(""+(i+1))
                    .source(JSON.toJSONString(bulklist.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return bulkResponse.status();
    }
    //自定义查询操作
    public ArrayList<Map<String, Object>> SearchReques() throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        QueryBuilder queryBuilder = new QueryBuilder();
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("name", "chuang");
//        MatchAllQueryBuilder allQueryBuilder = QueryBuilders.matchAllQuery(); 搜索全部
//        高亮搜索
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("title");
        highlightBuilder.requireFieldMatch(false);//关闭多个高亮 仅仅title高亮
        highlightBuilder.preTags("<span style='color:red'>");
        highlightBuilder.postTags("</span>");
        searchSourceBuilder.highlighter(highlightBuilder);
        //分页查询
        searchSourceBuilder.query(queryBuilder);
        searchSourceBuilder.from();
        searchSourceBuilder.size();
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//        String jsonString = JSON.toJSONString(searchResponse.getHits());
        ArrayList<Map<String,Object>> resultlist  = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()) {
//            searchResponse.getHits().getHits()  待测试
            //解析高亮字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField title = highlightFields.get("title");
            //正常数据
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            //与正常值置换
            if(title!=null){
                Text[] fragments = title.fragments();
                String n_title = "";
                for (Text text : fragments) {
                    n_title += text;
                }
                sourceAsMap.put("title",n_title);
            }

            resultlist.add(sourceAsMap);
            System.out.println(sourceAsMap);

        }
        return resultlist;
    }
}
package com.chuang.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @program: Shop-Server
 * @description: esconfig
 * @author: chuang
 * @create: 2022-02-18 10:12
 */
@Configuration
public class ESClientConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.88.129", 9200, "http")
                )
        );
        System.out.println(client);
        return client;
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闯孙闯孙

觉得有用就赞一个呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值