elasticsearchTemplate that could not be found

Posted zhian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearchTemplate that could not be found相关的知识,希望对你有一定的参考价值。

***************************
APPLICATION FAILED TO START
***************************

Description:

Method mvcConversionService in org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration required a bean named ‘elasticsearchTemplate‘ that could not be found.


Action:

Consider defining a bean named ‘elasticsearchTemplate‘ in your configuration.

查找原因 (原来以为是‘elasticsearch的版本问题,后面发现了项目的问题)

技术图片

 

一般创建的maven 产生的

技术图片

 

application.yml的配置文件

server:
  port: 19006
spring:
  application:
    name: essearch-service
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 127.0.0.1:9300
#      local: false
      repositories:
        enabled: true

 

package com.leyou.es.pojo;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
//import org.springframework.data.elasticsearch.annotations.Document;
//import org.springframework.data.elasticsearch.annotations.Field;
//import org.springframework.data.elasticsearch.annotations.FieldType;

/**
 * @author :cza
 * @date :2020/5/12 12:21
 * @description :
 * @modyified By:
 */
@Data
@Document(indexName = "heima3",type = "item",shards = 1,replicas = 0)
public class Item {
    @Id
    @Field(type= FieldType.Integer)
    private Integer id;
    @Field(type= FieldType.Text,analyzer = "ik_smart")
    private String title; //标题
    @Field(type= FieldType.Keyword)
    private String category; //分类

    @Field(type= FieldType.Keyword)
    private String brand; //品牌
    @Field(type= FieldType.Double)
    private Double price; //价格

    public Item(Integer id, String title, String category, String brand, Double price, String images) {
        this.id = id;
        this.title = title;
        this.category = category;
        this.brand = brand;
        this.price = price;
        this.images = images;
    }

    public Item() {
    }

    @Field(type= FieldType.Keyword,index = false)
    private  String images; //图片地址
}
package com.leyou.es.repository;

import com.leyou.es.pojo.Item;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.awt.print.Pageable;
import java.util.List;

/**
 * @author :cza
 * @date :2020/5/13 1:59
 * @description :
 * @modyified By:
 */
public interface ItemRepository extends ElasticsearchRepository<Item,Integer> {

//   List<Item> findByPriceBetween(Double begin, Double end);
//    List<Item> findBypNameOrPrice(String name, Integer price);
//    List<Item> findByName(String name, Pageable page);
}
package com.leyou.es;



import com.leyou.es.pojo.Item;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * @author :cza
 * @date :2020/5/12 12:29
 * @description :
 * @modyified By:
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTest {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    //@Autowired
    //private ItemRepository itemRepository;
    //@Autowired
    //private ElasticsearchRestTemplate elasticsearchRestTemplate;
    @Test
    public  void testCreateIndex(){
        //创建索引库
        elasticsearchTemplate.createIndex(Item.class);
        //映射关系
        elasticsearchTemplate.putMapping(Item.class);
    /*  //创建索引库
        elasticsearchRestTemplate.createIndex(Item.class);
        //映射关系
        elasticsearchRestTemplate.putMapping(Item.class);*/
    }

//    /**
//     * 插上全部
//     */
//      @Test
//    public  void insertIndexAll(){
//          List<Item> list=new ArrayList<>();
//          list.add(new Item(Integer.valueOf("1"),"坚果手机","手机","锤子",2699.00,"http://www.baidu.com"));
//          list.add(new Item(Integer.valueOf("2"),"华为Mate10手机","手机","华为",3699.00,"http://www.baidu.com"));
//          list.add(new Item(Integer.valueOf("3"),"小米Mi10手机","手机","小米",3099.00,"http://www.baidu.com"));
//          list.add(new Item(Integer.valueOf("3"),"小米Mi8手机","手机","小米",2399.00,"http://www.baidu.com"));
//
//          itemRepository.saveAll(list);
//    }
//
//    /**
//     * 查询所有
//     */
//    @Test
//    public  void testFind(){
//        Iterable<Item> all = itemRepository.findAll();
//        for (Item item :all){
//            System.out.println("item= "+item);
//        }
//    }
//
//    /**
//     * 根据价格查询
//     */
//    @Test
//    public  void testFindByPrice(){
//        Iterable<Item> all = itemRepository.findByPriceBetween(2000d,3500d);
//        for (Item item :all){
//            System.out.println("item= "+item);
//        }
//    }
//    @Test
//    public void search(){
//        //构建查询条件
//        NativeSearchQueryBuilder queryBuilder=new NativeSearchQueryBuilder();
//        //结果过滤
//        queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"id","title","price"},null));
//        //添加基本分词查询
//        queryBuilder.withQuery(QueryBuilders.matchQuery("title","小米"));
//        //排序
//        queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
//        //分页
//        queryBuilder.withPageable( PageRequest.of(1,20));
//        Page<Item> items = this.itemRepository.search(queryBuilder.build());
//        long totalcount = items.getTotalElements();
//        System.out.println("totalcount="+totalcount);
//        for (Item item:items){
//            System.out.println(item);
//        }
//        List<Item> list = items.getContent();
//        for (Item item :list){
//            System.out.println("item="+list);
//        }
//    }

    @Test
    public  void testAgg(){
        NativeSearchQueryBuilder queryBuilder=new NativeSearchQueryBuilder();
        String aggName="popularBrand";
        queryBuilder.addAggregation(AggregationBuilders.terms(aggName).field("brand"));
        //查询并返回聚合结果
        AggregatedPage<Item> result = elasticsearchTemplate.queryForPage(queryBuilder.build(), Item.class);
        //解析聚合
        Aggregations aggs = result.getAggregations();

        //获取指定名称的聚合
        StringTerms terms = aggs.get(aggName);
        List<StringTerms.Bucket> buckets = terms.getBuckets();
        for (StringTerms.Bucket bucket:buckets){
            System.out.println("bucket.getKeyAsString="+bucket.getKeyAsString());
            System.out.println("bucket.getDocCount="+bucket.getDocCount());
        }
    }
}
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath></relativePath>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
        <mapper.starter.version>2.0.3</mapper.starter.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!--springcloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--通用Mapper启动器-->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>${mapper.starter.version}</version>
            </dependency>
            <!--分页助手启动器-->
            <dependency>
                <groupId>com.github.pageHelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pageHelper.starter.version}</version>
            </dependency>
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--FASTDFS客户端-->
            <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>${fastDFS.client.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <!--       <version>5.0.6.RELEASE</version>-->
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 

es的版本下载

下载 elasticsearch 5.5.0 版本
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
elasticsearch-analysis-ik 5.5.0 版本
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.0/elasticsearch-analysis-ik-5.5.0.zip

 

查询elasticsearch-analysis-ik 版本,比如5.6.3
https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v5.6.3

 

下载地址:https://files.cnblogs.com/files/zhian/es-demotest.zip

 

以上是关于elasticsearchTemplate that could not be found的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 自动配置覆盖自定义(elasticsearchTemplate)配置

从 Spring-Boot 测试中排除 elasticsearchTemplate

elasticsearchTemplate的聚合查询

ElasticSearchRepository和ElasticSearchTemplate的使用

spring中应用模板模式封装ElasticsearchTemplate

elasticsearchTemplate that could not be found