SpringBoot学习之路---整合jest操作ElasticSearch

我们可以使用java代码的方式去操作ElasticSearch,而SpringBoot也为我们提供了整合的方式,整合ElasticSearch并操作的方式有两种,这一篇博客来记录其中的一种 (整合jest去操作ES)


老规矩,我们要使用某种技术,那么就要去导入它的maven相关依赖:

<!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
<dependency>
    <groupId>io.searchbox</groupId>
    <artifactId>jest</artifactId>
    <version>6.3.1</version>
</dependency>

导入相关依赖之后,就可以使用它来操作ElasticSearch(以下简称ES)了。jest其实是基于Http风格去操作ES的,关于它的介绍可以去GitHub上查阅官方文档
.

之后在全局配置文件中配置安装ES的主机ip地址与端口号:

spring:
  elasticsearch:
    jest:
      uris: http://*********:9200

我们测试操作ES,并且往里面存对象和取对象,在此之前编写一个User类,生成Getter/Setter方法:

public class User implements Serializable {
    
    @JestId
    private int user_id;
    private String username;
    private String password;

    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "user_id=" + user_id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

@JestId是标注当前属性为主键,这点和SpringData有点类似,基于ORM的思想。

之后在测试类中编写代码,要操作ES需要用到一个类,这个类JestClient在我们导入相关依赖时,SpringBoot就帮我们配置好了,我们可以直接拿来使用。

保存数据到索引中:

@SpringBootTest
class SpringbootElasticsearchApplicationTests {

    @Autowired
    private JestClient jestClient;

    @Test
    void save() {

        User user = new User();
        user.setUser_id(1);
        user.setUsername("leslie");
        user.setPassword("123456");

        Index index = new Index.Builder(user).index("school").type("user").build();

        try {
            jestClient.execute(index);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

这一行代码new Index.Builder(user).index("school").type("user").build();作用是把user对象放到索引school的user类型中

之后运行代码,没有报错的话我们直接去浏览器中访问(你安装es的主机ip地址):9200/school/user/1,因为浏览器默认发送get请求,我们也不需要去改变它,get请求能够直接查询数据:

在这里插入图片描述
我们可以拿到刚刚存储的数据。

接下来通过Java代码去获取数据:

@Test
    void get(){

        String json = "{\n" +
                "    \"query\" : {\n" +
                "        \"match\" : {\n" +
                "            \"username\" : \"leslie\"\n" +
                "        }\n" +
                "    }\n" +
                "}";

        Search search = new Search.Builder(json).addIndex("school").addType("user").build();

        try {
            SearchResult execute = jestClient.execute(search);
            System.out.println(execute.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

其中new Search.Builder(json).addIndex("school").addType("user").build();作用为使用ES的查询表达式(那个json对象)在索引school的user类型查询,之后调用jestClient.execute(search)执行并返回结果集,打印结果:

Result: {"took":6,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.2876821,"hits":[{"_index":"school","_type":"user","_id":"1","_score":0.2876821,"_source":{"user_id":1,"username":"leslie","password":"123456"}}]}}, isSucceeded: true, response code: 200, error message: null

可以看到打印出结果了。这是用jest来操作ES的方法。

猜你喜欢

转载自blog.csdn.net/Jokeronee/article/details/105853675