springboot Elasticsearch

springboot web项目调用elasticsearch API 进行索引、文档操作

pom.xml新增文件

 <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>4.9</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.2.0</version>
        </dependency>

Controller层  接收异常并进行处理

@Slf4j
@Controller
@RequestMapping(value = "/water-api")
@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true", allowedHeaders = "*")
public class ElasticsearchController {
    @Resource
    private RestHighLevelClient restHighLevelClient;
    @Resource
    private ElasticsearchUtil elasticsearchUtil;
   /**
     * 备注    CreateIndexRequest创建索引   GetIndexRequest获取索引   deleteIndexRequest删除索引
     * 查询索引是否存在
     *
     * @param indexName
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/index/exists", method = RequestMethod.POST)
    public Result indexExists(@RequestBody String indexName) {
        boolean exists = elasticsearchUtil.isIndexExists(indexName);
        return Result.ok(exists);
    }

    /**
     * 删除索引
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/delete/exists", method = RequestMethod.POST)
    public Result deleteIndex(@RequestBody HashMap<String, Object> map) {
        boolean isDelete = elasticsearchUtil.deleteIndex((String) map.get("indexName"));
        if (isDelete) {
            return Result.ok("删除成功");
        } else {
            return Result.ok("删除失败");
        }

    }
    /**
     * 测试创建索引
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/create/exists", method = RequestMethod.POST)
    public Result createIndex(@RequestBody HashMap<String, Object> map) {
        String indexName = String.valueOf(map.get("indexName"));

        try {
            XContentBuilder builder = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("properties")
                    .startObject()
                    .field("name").startObject().field("index", "true").field("type", "keyword").endObject()
                    .field("age").startObject().field("index", "true").field("type", "integer").endObject()
                    .field("money").startObject().field("index", "true").field("type", "double").endObject()
                    .field("address").startObject().field("index", "true").field("type", "text").endObject()
//                    .field("address").startObject().field("index", "true").field("type", "text").field("analyzer", "ik_max_word").endObject()
                    .field("birthday").startObject().field("index", "true").field("type", "date").field("format", "strict_date_optional_time||epoch_millis").endObject()
                    .endObject()
                    .endObject();
            //创建索引的请求
            CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
            createIndexRequest.mapping(builder);
            //客户端执行请求IndicesClient ,请求后获取响应
            CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);

//            IndexRequest indexRequest = new IndexRequest(indexName);
//            indexRequest.source(builder);
//            IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);

            boolean acknowledged = createIndexResponse.isAcknowledged();
            if (acknowledged) {
                return Result.ok("创建成功");
            }
        } catch (IOException e) {
            log.error("创建失败:{}", e.getCause());

        }
        return Result.error("创建失败");

    }

  /**
     * 测试获取索引
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/get/index", method = RequestMethod.POST)
    public Result getIndex(@RequestBody HashMap<String, Object> map) {
        GetIndexRequest getIndexRequest = new GetIndexRequest((String) map.get("indexName"));
        try {
            boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
            if (exists) {
                GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);
                return Result.ok("获取索引成功");
            } else {
                return Result.ok("索引不存在");
            }
        } catch (IOException e) {
            log.error("/get/index:{}", e.getStackTrace());
            return Result.ok("获取索引失败");
        }
    }


    public Result testIndexforJson(String indexName) throws IOException {

        IndexRequest indexRequest = new IndexRequest(indexName);
        String jsonString = "{" +
                "\"user\":\"niujun\"," +
                "\"postDate\":\"2019-06-10\"," +
                "\"message\":\"trying out Elasticsearch\"" +
                "}";
        //文档源以字符串形式提供
        indexRequest.source(jsonString, XContentType.JSON);
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        log.info("id:{}", indexResponse.getId());
        return Result.ok("插入成功");
    }

    public Result testIndexforMap(String indexName) throws IOException {
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("user", "kimchy");
        jsonMap.put("postDate", new Date());
        jsonMap.put("message", "trying out Elasticsearch");
        IndexRequest indexRequest = new IndexRequest(indexName);
        //文档源以字符串形式提供
        indexRequest.source(jsonMap);
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        log.info("id:{}", indexResponse.getId());
        return Result.ok("插入成功");
    }



    /**
     * 文档创建
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/add/document", method = RequestMethod.POST)
    public Result addDocument(@RequestBody HashMap<String, Object> map) throws IOException {
        //创建请求
        IndexRequest indexRequest = new IndexRequest((String) map.get("indexName"));
        //规则 put /indexName/_doc/1
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        ClientExceptionDto dto = new ClientExceptionDto();
        dto.setName("niujun");
        dto.setAge(33);
        //将数据放入请求中
        indexRequest.source(JSONObject.toJSONString(dto), XContentType.JSON);
        //客户端发送请求,获取
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        return Result.ok(indexResponse);
    }


    /**
     * 获取文档
     * web_water_2021.06.30/_doc/GhmeW3oBYRN5B60OiWub
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/get/document", method = RequestMethod.POST)
    public Result getDocument(@RequestBody HashMap<String, Object> map) throws IOException {
        String indexName = String.valueOf(map.get("indexName"));
        String docId = String.valueOf(map.get("docId"));
        //判断文档是否存在
        GetRequest getRequest = new GetRequest(indexName, docId);
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        if (exists) {
            GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
            return Result.ok(getResponse);
        } else {
            return Result.ok("文档不存在");
        }
    }

    /**
     * 更新文档
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/update/document", method = RequestMethod.POST)
    public Result updateDocument(@RequestBody HashMap<String, Object> map) throws IOException {
        String indexName = String.valueOf(map.get("indexName"));
        String docId = String.valueOf(map.get("docId"));
        UpdateRequest updateRequest = new UpdateRequest(indexName, docId);
        updateRequest.timeout(TimeValue.timeValueSeconds(1));
        ClientExceptionDto dto = new ClientExceptionDto();
        dto.setName("niujun1");
        dto.setAge(331);
        updateRequest.doc(JSONObject.toJSONString(dto), XContentType.JSON);
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        return Result.ok(updateResponse);
    }


    /**
     * 删除文档
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/delete/document", method = RequestMethod.POST)
    public Result deleteDocument(@RequestBody HashMap<String, Object> map) throws IOException {
        String indexName = String.valueOf(map.get("indexName"));
        String docId = String.valueOf(map.get("docId"));
        DeleteRequest deleteRequest = new DeleteRequest(indexName, docId);
        deleteRequest.timeout(TimeValue.timeValueSeconds(1));
        DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        return Result.ok(deleteResponse);
    }

    /**
     * 特殊 ,真实项目一般都是批量插入数据
     *
     * @param map
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/bulkRequest/document", method = RequestMethod.POST)
    public Result bulkRequest(@RequestBody HashMap<String, Object> map) throws IOException {
        String indexName = String.valueOf(map.get("indexName"));
        String docId = String.valueOf(map.get("docId"));
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout(TimeValue.timeValueSeconds(1));
        List<ClientExceptionDto> list = Lists.newArrayListWithExpectedSize(8);
        for (int i = 0; i < list.size(); i++) {
            bulkRequest.add(new IndexRequest(indexName).source(JSONObject.toJSONString(list.get(0)), XContentType.JSON));
        }
        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return Result.ok(bulkResponse);
    }




}

EsConfiguration  Java文件
@Configuration
public class EsConfiguration {
    private static String hosts = "192.168.60.233"; // 集群地址,多个用,隔开
    private static int port = 9200; // 使用的端口号
    private static String schema = "http"; // 使用的协议
    private static ArrayList<HttpHost> hostList = null;

    private static int connectTimeOut = 1000; // 连接超时时间
    private static int socketTimeOut = 30000; // 连接超时时间
    private static int connectionRequestTimeOut = 500; // 获取连接的超时时间


    private static int maxConnectNum = 100; // 最大连接数
    private static int maxConnectPerRoute = 100; // 最大路由连接数

    static {
        hostList = new ArrayList<>();
        String[] hostStrs = hosts.split(",");
        for (String host : hostStrs) {
            hostList.add(new HttpHost(host, port, schema));
        }
    }

    @Bean
    public RestHighLevelClient client() {
        RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
        // 异步httpclient连接延时配置
        builder.setRequestConfigCallback(new RequestConfigCallback() {
            @Override
            public Builder customizeRequestConfig(Builder requestConfigBuilder) {
                requestConfigBuilder.setConnectTimeout(connectTimeOut);
                requestConfigBuilder.setSocketTimeout(socketTimeOut);
                requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
                return requestConfigBuilder;
            }
        });
        // 异步httpclient连接数配置
        builder.setHttpClientConfigCallback(new HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.setMaxConnTotal(maxConnectNum);
                httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
                return httpClientBuilder;
            }
        });
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }


}

ElasticsearchUtil  Java文件
@Component
public class ElasticsearchUtil {
    @Resource
    private RestHighLevelClient restHighLevelClient;

    /**
     * 判断索引是否存在
     *
     * @param indexName
     * @return
     */
    public boolean isIndexExists(String indexName) {
        boolean exists = false;
        GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
        getIndexRequest.humanReadable(true);
        try {
            exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return exists;
    }

    public boolean deleteIndex(String indexName) {
        boolean acknowledged = false;
        try {
            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);
            deleteIndexRequest.indicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN);
            AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
            acknowledged = delete.isAcknowledged();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return acknowledged;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值