elasticsearch (Java High Level REST Client) api
Java高级REST客户端在Java低级REST客户端之上工作。它的主要目标是公开API特定的方法,接受请求对象作为参数并返回响应对象,以便客户端自己处理请求编组和响应非编组。
可以同步或异步调用每个API。同步方法返回响应对象,而名称以async后缀结尾的异步方法需要一旦收到响应或错误就通知(在由低级客户端管理的线程池上)的侦听器参数。
Java高级REST客户端依赖于Elasticsearch核心项目。它接受与the相同的请求参数,TransportClient并返回相同的响应对象。
兼容性
Java高级REST客户端需要Java 1.8并依赖于Elasticsearch核心项目。客户端版本与客户端开发的Elasticsearch版本相同。它接受与the相同的请求参数,TransportClient 并返回相同的响应对象
代码初始化方式
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
IDE新建SpringBoot项目
pom.xml配置
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client-sniffer</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.16</version>
</dependency>
application.properties
server.port=80
server.servlet.context-path=/es-boot
spring.data.elasticsearch.cluster-nodes=192.168.1.191:9200
数据配置,进行初始化操作
/**
* elasticsearch spring-data 目前支持的最高版本为5.5 所以需要自己注入生成客户端
*
* 数据配置,进行初始化操作
* @author qinxuewu
* @version 1.00
* @time 28/8/2018下午 5:54
*/
@Configuration
public class ESConfiguration implements FactoryBean<RestHighLevelClient>, InitializingBean, DisposableBean {
private static final Logger LOG = LoggerFactory.getLogger(ESConfiguration.class);
@Value("${spring.data.elasticsearch.cluster-nodes}")
private String clusterNodes;
private RestHighLevelClient restHighLevelClient;
/**
* 控制Bean的实例化过程
*
* @return
* @throws Exception
*/
@Override
public RestHighLevelClient getObject() throws Exception {
return restHighLevelClient;
}
/**
* 获取接口返回的实例的class
*
* @return
*/
@Override
public Class<?> getObjectType() {
return RestHighLevelClient.class;
}
@Override
public void destroy() throws Exception {
try {
if (restHighLevelClient != null) {
restHighLevelClient.close();
}
} catch (final Exception e) {
LOG.error("Error closing ElasticSearch client: ", e);
}
}
public boolean isSingleton() {
return false;
}
@Override
public void afterPropertiesSet() throws Exception {
restHighLevelClient = buildClient();
}
private RestHighLevelClient buildClient() {
try {
restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(clusterNodes.split(":")[0], Integer.parseInt(clusterNodes.split(":")[1]), "http")));
} catch (Exception e) {
LOG.error(e.getMessage());
}
return restHighLevelClient;
}
}
@Component
public class EsDao {
private static final Logger LOG = LoggerFactory.getLogger(EsDao.class);
@Autowired
private RestHighLevelClient client;
/**
* 判断索引是否存在
* @param index 索引(关系型数据库)
* @return
*/
public boolean isIndexExist(String index){
try {
GetRequest getRequest=new GetRequest(index);
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(<