springboot整合elasticsearch入门demo

本文是基于springBoot的elasticsearch入门demo,主要包含:

(1)索引的增删改查

(2)文档的增删改查

 

先看项目结构:

 

1.创建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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.qxf</groupId>
	<artifactId>elasticsearch-api</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>elasticsearch-api</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<elasticsearch.version>7.7.1</elasticsearch.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.59</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

这里有两个需要注意的地方:

(1)springBoot的版本,这里是2.2.6.RELEASE

(2)elasticsearch的版本,这里是7.7.1

 

2.添加配置类,提供 RestHighLevelClient

@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        return client;
    }

}

 

3. 添加实体类,主要是为了测试

public class User {
    private String name;
    private Integer age;

    public User() {

    }
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

4.编写测试

@SpringBootTest
public class ESApiTest {
    @Autowired
    RestHighLevelClient restHighLevelClient;

    // 创建索引
    @Test
    public void testCreateIndex() throws IOException {
        // 创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("test_index");
        // 执行创建索引请求
        CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
    }

    @Test
    void testIndexExists() throws IOException {
        // 判断索引是否存在
        GetIndexRequest getIndexRequest = new GetIndexRequest("test_index");
        boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("索引test_index是否存在? "+exists);
    }

    @Test
    void testDeleteIndex() throws IOException {
        // 删除索引
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test_index");
        AcknowledgedResponse response = restHighLevelClient.indices()
                .delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println("索引test_index是否删除成功? "+response.isAcknowledged());
    }

    // 创建文档
    @Test
    void testCreateDocument() throws IOException {
        User user = new User("张三",22);
        // 创建请求
        IndexRequest indexRequest = new IndexRequest("test_index");
        // 设置文档id
        indexRequest.id("123");
        // 放入数据
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
        // 客户端发送请求,获得响应结果
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);

        System.out.println("响应结果 "+indexResponse.toString());
        System.out.println("状态 "+indexResponse.status());
    }

    // 获取文档
    @Test
    void testGetDocument() throws IOException {
        GetRequest getRequest = new GetRequest("test_index", "123");
        // 不获取 _source 返回的上下文,效率会更高
//        getRequest.fetchSourceContext(new FetchSourceContext(false));
//        getRequest.storedFields("_none_");
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println("文档是否存在? "+exists);
        if (exists){
            GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
            System.out.println("获取文档内容 "+response.getSourceAsString());
//            System.out.println("获取文档 "+response);
        }
    }

    // 更新文档
    @Test
    void testUpdateDocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("test_index", "123");
        User user = new User("李四", 24);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println("更新? "+update.status());
    }

    // 删除文档
    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("test_index", "123");
        DeleteResponse response = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println("删除? "+response.status());
    }

    // 批量插入
    @Test
    void testBulkAddDocument() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList<User> userList = new ArrayList<>(3);
        userList.add(new User("张三1",21));
        userList.add(new User("张三2",22));
        userList.add(new User("张三3",23));
        for (int i=0;i<userList.size();i++){
            bulkRequest.add(new IndexRequest("test_index")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(userList.get(i)),XContentType.JSON)

            );
        }

        BulkResponse responses = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println("是否失败? "+responses.hasFailures());
    }

    // 查询
    @Test
    void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("test_index");
        // 构建搜索条件
        SearchSourceBuilder builder = new SearchSourceBuilder();
        // 查询条件
        // QueryBuilders.termQuery 精确查询
        TermQueryBuilder termBuilder = QueryBuilders.termQuery("name", "张三");
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三");
//        builder.from(0);
//        builder.size(10);
        builder.query(queryBuilder);
        searchRequest.source(builder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("获取查询对象 "+JSON.toJSONString(searchResponse.getHits()));
        System.out.println("===================");
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            System.out.println("for循环获取 "+documentFields.getSourceAsMap());
        }
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值