RestHighLevelClient使用记录
1 SpringBoot整合
1.1 maven依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
1.2 注册Bean
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class ElasticSearchConfig {
private static final Logger logger = LoggerFactory.getLogger(ElasticSearchConfig.class);
@Value("${elasticsearch.cloud.hosts}")
private String cloudHosts;
@Bean(name = "restHighLevelClient")
public RestHighLevelClient restHighLevelClient() {
logger.info(">> ElasticSearch # init ...");
RestHighLevelClient restHighLevelClient = null;
try {
String[] hosts = cloudHosts.split(",");
List<HttpHost> httpHosts = new ArrayList<>();
for (String item : hosts){
httpHosts.add(new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http"));
}
HttpHost[] clients = httpHosts.toArray(new HttpHost[httpHosts.size()]);
RestClientBuilder restClientBuilder = RestClient.builder(clients);
restHighLevelClient = new RestHighLevelClient(restClientBuilder);
} catch (Exception e) {
logger.error(">> ElasticSearch # TransportClient create error!", e);
System.exit(1);
}
logger.info(">> ElasticSearch # init finished.");
return restHighLevelClient;
}
}
2 使用
2.1 新增
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest(index).id(id).source(JSON.toJSONString(author, serializeConfig), XContentType.JSON));
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
2.2 整体更新
UpdateRequest updateRequest = new UpdateRequest(index, id);
updateRequest.doc(JSON.toJSONString(author, serializeConfig), XContentType.JSON);
UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
2.3 局部更新
Map<String, Object> params = new HashMap<>();
params.put("analysis", JSON.toJSON(response.getResults()));
UpdateByQueryRequest request = new UpdateByQueryRequest(index);
request.setQuery(new TermQueryBuilder("mid", mid));
request.setMaxDocs(1);
request.setScript(new Script(ScriptType.INLINE, "painless", "ctx._source.analysis = params.analysis", params)));
BulkByScrollResponse response = restHighLevelClient.updateByQuery(request, RequestOptions.DEFAULT);