Spring Boot----整合Elasticsearch

1、创建项目

SpringBoot 默认支持两种技术来和ES交互;

1、Jest(默认不生效:需要导入jest相关包

2、SpringData ElasticSearch

 

2、测试Jest与ES交互

2.1注释掉

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

2.2 导入

        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
            <version>6.3.1</version>
        </dependency>

2.3 配置

spring.elasticsearch.jest.uris=http://localhost:9200

2.4 User

public class User{
    @JestId
    private Integer id;
    private String name;
}

2.5 测试

    @Autowired
    JestClient jestClient;

    @Test  //插入数据
    public void test1() throws IOException {
        User user = new User();
        user.setId(2);
        user.setName("user2");
        //index,type不能有大写英文字母
        Index index = new Index.Builder(user).index("jest_index").type("jest_type").build();
        jestClient.execute(index);
    }
    @Test  //索引数据
    public void test2() throws IOException {
        String query = "{\n" +
                "    \"query\" : {\n" +
                "        \"match\" : {\n" +
                "            \"name\" : \"user2\"\n" +
                "        }\n" +
                "    }\n" +
                "}";

        Search build = new Search.Builder(query).addIndex("jest_index").addType("jest_type").build();
        SearchResult execute = jestClient.execute(build);
        System.out.println(execute);
    }

  

3、SpringBoot 整合SpringData ElasticSearch

一定要选择合适的ElasticSearch否则可能会出现意想不到的错误:https://github.com/spring-projects/spring-data-elasticsearch

3.1 添加之前注释掉的依赖,jest可以注释掉了

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

3.2 application.properties

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

3.3. User

@Document(indexName = "index2",type = "type2")
public class User{
    private Integer id;
    private String name;
}

3.4 repository(dao)

//User:操作的对象,Integer:主键的类型
public interface UserRepository extends ElasticsearchRepository<User,Integer> {
}

3.5 测试

    @Autowired
    private UserRepository repository;
    @Test
    public void test(){
        User user = new User();
        user.setId(5);
        user.setName("user5");
        repository.index(user);
    }
    @Test
    public void test2(){
        //或者浏览器访问:http://localhost:9200/index2/type2/5
        Optional<User> byId = repository.findById(5);
        System.out.println(byId.get());
    }

3.6 补充:自定义查询

public interface UserRepository extends ElasticsearchRepository<User,Integer> {
    //可以自定义实现名字的定义必须按照官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/3.1.10.RELEASE/reference/html/
    public User findByName(String username);
}

  

 

 

3.7 使用 ElasticsearchTemplate(略)

 

 

 

  

 

posted @ 2019-08-20 22:07  小名的同学  阅读(287)  评论(0编辑  收藏  举报