随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、依赖

  创建一个项目,添加 elasticsearch 的相关依赖:

<!--SpringBoot 默认使用 SpringData ElasticSearch 模块进行操作-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

 

二、自动配置

  1、SpringData Elasticsearch 自动配置

  (1)ElasticsearchAutoConfiguration 类提供了Client 客户端节点信息,需要配置 ClusterNodes、ClusterName

    

 

  (2)ElasticsearchDataAutoConfiguration 提供了 ElasticsearchTemplate 操作 ES

    

 

  (3)ElasticsearchRepositoriesAutoConfiguration 中导入了 ElasticsearchRepository接口,可以通过这个接口对ES进行操作

 

 

  2、Jest 的自动配置 JestAutoConfiguration

    

 

     

 

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

  (1)Jest(默认不生效)
    需要导入 jest的工具包:io.searchbox.client.JestClient

  (2)使用SpringData ElasticSearch 操作

    ① 需要设置 提供了Client 客户端节点信息,需要配置 ClusterNodes、ClusterName

    ② 提供了 ElasticsearchTemplate 操作 ES

    ③ 可以使用 ElasticsearchRepository接口,可以通过这个接口对ES进行操作

 

 

三、使用 Jest 操作 ElasticSearch

  1、加入依赖

复制代码
<!--Jest 依赖-->
<!--与 ElasticSearch 版本要匹配-->
<dependency>
    <groupId>io.searchbox</groupId>
    <artifactId>jest</artifactId>
    <version>5.3.3</version>
</dependency>
复制代码

 

  2、配置 Elasticsearch 地址

    

 

     

 

     默认连接的是本地的 ElasticSearch,可以在配置文件中配置指定的IP地址,如下:

1
2
# Jest 的配置信息,远程主机地址
spring.elasticsearch.jest.uris=https://192.158.1.8:9200

 

  3、使用 JestClient 进行测试

  (1)测试索引(保存)

复制代码
    @Autowired
    JestClient jestClient;

    //测试索引
    @Test
    public void test01() {
        //1、给ES中索引(保存)一个文档
        Article article = new Article();
        article.setId(1);
        article.setTitle("好消息");
        article.setAuthor("张三");
        article.setContent("Hello World!");

        //2、构建一个索引功能,Builder参数为要保存的文档,index设置索引,type设置类型,还可以使用id设置id
        Index index = new Index.Builder(article).index("njf").type("news").build();


        try {
            //3、执行
            jestClient.execute(index);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
复制代码

 

  (2)测试查询

复制代码
    //测试搜索
    @Test
    public void search() {
        //1、查询表达式
        String json = "{\n" +
                "    \"query\" : {\n" +
                "        \"match_phrase\" : {\n" +
                "            \"content\" : \"hello\"\n" +
                "        }\n" +
                "    }\n" +
                "}";

        //2、构建所搜功能,Builder参数为查询表达式,设置索引与类型
        Search search = new Search.Builder(json).addIndex("njf").addType("news").build();

        //3、执行
        try {
            SearchResult result = jestClient.execute(search);
            System.out.println(result.getJsonString());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
复制代码

 

 

四、使用 SpringData Elasticsearch 操作ES

  1、配置 SpringData 的信息

1
2
3
#SpringData ElasticSearch
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=192.158.1.8:9300

 

  2、版本适配问题

  使用 SpringData ElasticSearch可能会出现适配问题【ES版本有可能版本不合适】

  版本适配说明:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference

  

 

 

  如果版本不适配

         (1)升级SpringBoot版本

         (2)安装对应版本的 ES

 

  3、操作ES

  (1)使用 ElasticSearchRepository 接口

    ① 创建 BookElasticsearchRepository 接口

复制代码
/**
 * ElasticsearchRepository<T, ID extends Serializable>
 *     两个泛型
 *     T:保存的类型
 *     ID:主键类型
 *
 */
public interface BookRepository extends ElasticsearchRepository<Book, Integer> {

    public List<Book> findByBookNameLike(String bookName);
}
复制代码

 

    ② 创建Book类

复制代码
//使用该注解指定 索引indexName 和类型type
@Document(indexName = "njf", type = "book")
public class Book {

    private Integer id;
    private String bookName;
    private String author;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}
复制代码

 

    ③ 测试保存

复制代码
    @Autowired
    BookRepository bookRepository;

    @Test
    public void test02() {
        Book book = new Book();
        book.setId(1);
        book.setAuthor("张三");
        book.setBookName("ES从入门到精通");

        bookRepository.index(book);
    }
复制代码

 

    ④ 测试查询

复制代码
    @Autowired
    BookRepository bookRepository;

    @Test
    public void test03() {
        Book book = new Book();
        book.setId(1);
        book.setAuthor("张三");
        book.setBookName("ES从入门到精通");

        List<Book> books = bookRepository.findByBookNameLike("入门");
        books.forEach(System.out::println);
    }
复制代码

 

  (2)使用 ElasticsearchTemplate

 

  相关参考文档:

  https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/

  https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference

  

posted on   格物致知_Tony  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
历史上的今天:
2021-01-03 Java 面向对象:理解 main 方法的语法
2021-01-03 第二节:简单工厂模式(静态工厂模式)
2021-01-03 第一节:不使用设计模式的传统方式
点击右上角即可分享
微信分享提示

目录导航