zoukankan      html  css  js  c++  java
  • SpringBoot集成Elasticsearch

    1. 准备工作

      需要提前安装好Elasticsearch,访问地址:http://127.0.0.1:9200/ 得到以下结果,得到cluster_name,下面配置使用。

    {
      "name" : "O8GslS3",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "pviTqfXtR3GtnxF-Po-_aA",
      "version" : {
        "number" : "6.5.0",
        ......
      },
      "tagline" : "You Know, for Search"
    }

    2. 使用Maven创建SpringBoot工程

      配置Maven的pom.xml文件

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

      注意:spring-boot-starter-data-elasticsearch包,引用的是spring-data-elasticsearch包,而spring-data-elasticsearch包的版本与elasticsearch服务版本是有兼容性问题的。

      目前并不支持elasticsearch7.x,参考:https://github.com/spring-projects/spring-data-elasticsearch

      配置application.yml文件

    spring:
      data:
        elasticsearch:
          cluster-name: docker-cluster
          cluster-nodes: 127.0.0.1:9300
          repositories:
            enabled: true

    3. 代码

      实体类。使用@Document注解,参数indexName是索引名称,type是type名称。

    // indexName索引名称,type类型
    @Document(indexName = "houseindex", type = "house")
    public class HouseIndexTemplate {
    
        @Id
        private Long houseId;
    
        // 使用分词器
        @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
        private String title;
    
        @Field(type = FieldType.Keyword)
        private String name;
    
        @Field(type = FieldType.Integer)
        private int price;
    
    
    }
        

      访问接口。使用@Repository注解,并继承ElasticsearchRepository接口,就可以直接访问的。

      有两个参数:1.返回的对象,2.ID参数数据类型

    @Repository
    public interface HouseRepository extends ElasticsearchRepository<HouseIndexTemplate, Long> {
    
    }

      测试用例

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    public class UserServiceTest {
    
        @Autowired
        private HouseRepository houseRepository;
    
        @Test
        public void selectUser(){
    HouseIndexTemplate template = new HouseIndexTemplate();
    template.setId(1);
    template.setName("Tom"); houseRepository.save(template);
    } }

    4. 异常解释

      问题1: NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{IVH9QII0QrOU9GkXdsJPiA}{127.0.0.1}{127.0.0.1:9300}]]

      原因:这是说配置的节点不可用,原因答题有3种可能:(1)IP地址或端口填写有误;(2)cluster_name填写有误;(3)Elasticsearch服务已关闭

  • 相关阅读:
    Linux下date命令,格式化输出,时间设置
    Linux scp复制文件,不需要输入密码的技巧
    Linux中cp和scp命令的使用方法
    Linux定时任务系统 Cron
    Eclipse启动Tomcat后无法访问项目
    eclipse下tomcat插件配置说明
    RPM方式安装MySQL5.6和windows下安装mysql解压版
    shell script练习
    Eclipse Java注释模板设置详解
    mysql备份还原数据库
  • 原文地址:https://www.cnblogs.com/huanshilang/p/12622356.html
Copyright © 2011-2022 走看看