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
ElasticSearchRepository和ElasticSearchTemplate的使用