老规矩,先建maven
项目,下面是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>springboot-es-all</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <dependencies> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--ElasticSearch 客户端依赖--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.8.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.8.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.0</version> </dependency> <!--Hutool依赖--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.4</version> </dependency> <!--fast-json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-api </artifactId> <version> 1.6.4 </version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.3.RELEASE</version> </plugin> </plugins> </build> </project>
这里我使用的是elasticsearch-rest-high-level-client
官方客户端,建议大家尽量用官方的,因为随着es
的不断升级,很多api
都过时了,如果你使用spring-boot-starter-data-elasticsearch
这个要依赖社区去维护,很多新特性你没法使用到,也会存在安全性问题。
启动类:
@SpringBootApplication public class EsStudyApplication { public static void main(String[] args) { SpringApplication.run(EsStudyApplication.class, args); } }
配置文件 application.yml
:
server: port: 9000 elasticsearch: host: 0.0.0.0 port: 9200 username: password:
客户端配置 config.EsClientConfig
:
@Configuration public class EsClientConfig { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Value("${elasticsearch.username}") private String userName; @Value("${elasticsearch.password}") private String password; @Bean public RestHighLevelClient restHighLevelClient() { final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); RestHighLevelClient restHighLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost( host, port, "http")).setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setMaxConnTotal(500); httpClientBuilder.setMaxConnPerRoute(300); return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); }) ); return restHighLevelClient; } }
然后客户端我们就配好了,客户端的配置其实还有很多,感兴趣的同学自行查阅。后续使用的时候,直接导入RestHighLevelClient
实例就好了
接着启动它,如果控制没有报错,说明配置没啥问题了, 记得要开启es
服务~
下面我们写一点测试用例,来验证我们是否可以操作es
,为了方便演示,这里直接使用SpringBootTest
来测试,大家平时在写springboot
项目,类测试的时候也可以这么做
新建api.IndexApi
,调用ping()
方法来测试是否链接成功:
@Slf4j @SpringBootTest public class IndexApi { /** * es 索引 */ public static final String index = "study"; @Autowired private RestHighLevelClient client; @Test public void ping() throws IOException { if(client.ping(RequestOptions.DEFAULT)) { log.info("链接成功"); }else { log.info("链接失败 !"); } } }
点击IndexApi
左上角的绿色箭头启动测试用例, 如果报错,尝试添加以下 注解
@RunWith(SpringRunner.class) @SpringBootTest(classes = { EsStudyApplication.class }) public class IndexApi {....}
返回:
链接成功
说明客户端
与es
服务端是通的
通过前面的学习,有了一定的基础之后,回到代码中其实就是调调方法
,因为你知道了这个代码的逻辑做了什么操作。下面来看下如何创建索引:
/** * 创建索引 */ @Test public void createIndex() throws IOException { CreateIndexRequest request = new CreateIndexRequest(index); CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); log.info("创建索引 ===> "+ JSONObject.toJSONString(createIndexResponse)); // 创建索引 ===> {"acknowledged":true,"fragment":false,"shardsAcknowledged":true} }
大家可以返回到kibana
中查看索引
是否被创建,从而验证代码执行是否成功
添加别名:
// alias request.alias(new Alias("study_alias"));
索引设置settings
:
// index settings request.settings( Settings.builder() .put("index.number_of_shards", 3) .put("index.number_of_replicas", 2) );
索引映射mapping
:
// index mappings // { // "mapping": { // "_doc": { // "properties": { // "name": { // "type": "text" // } // } // } // } // } XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.startObject("properties"); { builder.startObject("name"); { builder.field("type", "text"); } builder.endObject(); } builder.endObject(); } builder.endObject(); request.mapping(builder);
设置请求超时时间:
// 请求设置 request.setTimeout(TimeValue.timeValueMinutes(1));
/** * 判断索引是否存在 * @throws IOException */ @Test public void existIndex() throws IOException { GetIndexRequest request = new GetIndexRequest(index); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); log.info("索引{}存在 ===> {}", index, exists); }
/** * 删除索引 * @throws IOException */ @Test public void delIndex() throws IOException { DeleteIndexRequest request = new DeleteIndexRequest(index); AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT); log.info("删除索引 ===> {}", JSONObject.toJSONString(delete)); // 删除索引 ===> {"acknowledged":true,"fragment":false} }
The above is the detailed content of What is the method for ElasticSearch to integrate SpringBoot to build configuration?. For more information, please follow other related articles on the PHP Chinese website!