spring5+spring-data-elasticsearch集成

一、搞定依赖


	UTF-8
	5.0.0.RELEASE
	3.0.0.RELEASE
	UTF-8
	1.8
	2.9.0
	2.5.5.cat-SNAPSHOT



	org.springframework
	spring-aop
	${spring.version}


	org.springframework
	spring-beans
	${spring.version}


	org.springframework
	spring-context
	${spring.version}


	org.springframework
	spring-context-support
	${spring.version}


	org.springframework
	spring-core
	${spring.version}


	org.springframework
	spring-expression
	${spring.version}


	org.springframework
	spring-jdbc
	${spring.version}


	org.springframework
	spring-orm
	${spring.version}


	org.springframework
	spring-tx
	${spring.version}


	org.springframework
	spring-web
	${spring.version}


	org.springframework
	spring-webmvc
	${spring.version}


	org.springframework
	spring-aspects
	${spring.version}


	org.springframework
	spring-test
	${spring.version}


	org.springframework.data
	spring-data-elasticsearch
	${spring-data-es.version}

以上供参考,供参考。

二、spring配置




    
    
     

    
    
        
    

    
    

    
    



三、编写代码

model类:
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName="aa", type = "bb")
public class Goods {
    @Id
    private String id; // id必须有
    private String udateTime;
    private String sku_no;
// 省略get/set
dao类:
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface GoodsDao extends ElasticsearchRepository {

    /**
     * 根据skuNo查询商品
     * 此处必须有 @Query指定查询字段名称:sku_no,否则报错
     */
    @Query("{\"bool\" : {\"must\" : {\"term\" : {\"sku_no\" : \"?0\"}}}}")
    Goods findBySkuNo(String skuNo);

    /**
     * 功能描述:根据udateTime查询商品
     */
    Goods findByUdateTime(String udateTime);
}
service类:
@Service
public class GoodsService {
    @Autowired
    private GoodsDao esDao;

    public Goods findBySkuNo(String skuNo) {
        return esDao.findBySkuNo(skuNo);
    }

    public Goods findByUdateTime(String udateTime) {
        return esDao.findByUdateTime(udateTime);
    }
}
controller类:
@Controller
@RequestMapping("/")
public class TestController {
    @Autowired
    private GoodsService goodsService;

    @RequestMapping("get")
    @ResponseBody
    public Object get(String skuNo) {
        return goodsService.findBySkuNo(skuNo);
    }
    // 以下省略

四、错误排查

1、NoNodeAvailableException[None of the configured nodes are available 
原因:es客户端版本与服务端版本不一致。客户端与服务端大版本必须一致。

2、Caused by: java.lang.AbstractMethodError: org.springframework.data.elasticsearch.repository.config.ElasticsearchRepositoryConfigExtension.getRepositoryFactoryClassName()Ljava/lang/String;
原因:spring-data-commons包冲突。升级为2.0.0.RELEASE,并排除低版本依赖

3、netty版本排除,只保留spring-data-elasticsearch引入的netty

                    io.netty
                    netty-all
               


4、Initialization of bean failed; java.lang.AbstractMethodError
解决:升级spring版本到合适版本



你可能感兴趣的:(java,spring,ElasticSearch)