elasticsearch之RestHighLevelClient简单使用

920 阅读1分钟

包引入

//gradle
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.8.10'
implementation 'org.elasticsearch:elasticsearch:6.8.10

<!-- maven -->
<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch</artifactId>
  <version>6.8.10</version>
</dependency>
<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-high-level-client</artifactId>
  <version>6.8.10</version>
</dependency>

注:大版本须和elasticsearch的版本一致,小版本可大于等于elasticsearch的版本

Client初始化

/**
*es配置相关参数
**/
@Data
@ConfigurationProperties(prefix = ElasticSearchProperties.PREFIX)
@Configuration
public class ElasticSearchProperties {
    public static final String PREFIX = "spring.elasticsearch";

    /**
     *  ES集群结点
     */
    private String[] clusterNodes;

    /**
     *  x-pack 认证用户名
     */
    private String username;

    /**
     * x-pack 认证密码
     */
    private String password;

    /**
     * 连接超时时间,默认1000毫秒
     */
    private int connectTimeout = 1000;

    /**
     * Socket超时时间,默认3000毫秒
     */
    private int socketTimeout = 3000;
}
/**
*Client初始化
**/
@Slf4j
@Configuration
@EnableConfigurationProperties(ElasticSearchProperties.class)
public class ElasticSearchConfig {

    private final ElasticSearchProperties elasticSearchProperties;

    public ElasticSearchConfig(ElasticSearchProperties elasticSearchProperties) {
        this.elasticSearchProperties = elasticSearchProperties;
    }

    @Bean
    public RestHighLevelClient buildClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        String username = elasticSearchProperties.getUsername();
        String password = elasticSearchProperties.getPassword();
        final String[] clusterNodes = elasticSearchProperties.getClusterNodes();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));
        HttpHost[] hosts = new HttpHost[clusterNodes.length];
        for (int i = 0; i < clusterNodes.length; i++) {
            hosts[i] = new HttpHost(clusterNodes[i], 9200, "http");
        }

        RestClientBuilder builder = RestClient.builder(hosts)
                .setHttpClientConfigCallback(
                        httpClientBuilder -> httpClientBuilder
                                .setDefaultCredentialsProvider(credentialsProvider))
                .setRequestConfigCallback(
                        requestConfigBuilder -> requestConfigBuilder
                                .setConnectTimeout(elasticSearchProperties.getConnectTimeout())
                                .setSocketTimeout(elasticSearchProperties.getSocketTimeout())
                );
        RestHighLevelClient restHighLevelClient = new MyRestHighLevelClient(                builder);
        return restHighLevelClient;
    }
}

/**
*自定义客户端,添加关闭应用时同时关闭客户端
**/
public class MyRestHighLevelClient extends RestHighLevelClient implements DisposableBean {
    public MyRestHighLevelClient(RestClientBuilder restClientBuilder) {
        super(restClientBuilder);
    }

    @Override
    public void destroy() throws Exception {
        super.close();
    }
}

创建索引

CreateIndexRequest request = new CreateIndexRequest("test");
Map<String, Object> message = new HashMap<>();
message.put("type", "text");
Map<String, Object> properties = new HashMap<>();
properties.put("message", message);
Map<String, Object> mapping = new HashMap<>();
mapping.put("properties", properties);
//此处也可以使用String或XContentBuilder
request.mapping(mapping);
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);

查询(待添加)