spring boot项目,Elasticsearch的一种使用方式
来源:互联网 发布:网络牛牛赌博几率 编辑:程序博客网 时间:2024/06/05 07:39
Elasticsearch和Solr都是搜索引擎,在java项目中使用,非常方便,查询效率也很高。Elasticsearch支持分布式部署,支持全文搜索。具体的使用方式我还未完全掌握,我在项目中的角色是服务接口的开发,关于Elasticsearch,就是使用它检索数据。
作为程序员,使用不熟悉的知识技能去完成开发任务,是基本技能吧。先在网上查找Elasticsearch的资料,查看别人的使用经验。Elasticsearch使用有2种方式,可以使用HTTP调用,也可以建立client连接使用。由于后期服务量会比较大,决定采用建立client连接的方式查询。首先使用了org.elasticsearch:5.2.2的jar不可以。之后问了下同事,他的工作是数据处理,建索存储,他已经正常使用了。把他的使用方式拿了过来,org.elasticsearch.client:5.2.2版本的jar包,还是不行,非常诡异。
由于同事已经正常使用,我就感觉是我这边的问题,只好打断点,排查代码了。首先是报这个错误,报错1:Unsupported major.minor version 52.0,经过网上搜索,发现是jdk版本过低的问题,1.7都不行。注意:elasticsearch5.2版本,只能用jdk1.8及以上。
第一个问题解决后,继续报错。报错2:找不到NetworkPlugin。这个问题在同事那儿是没问题的,继续排查,发现报错是发生在创建client时,new PreBuiltTransportClient时报错。点进去后这个类发现,它不在elasticsearch-5.2.2.jar中,却在elasticsearch-2.4.4.jar中,当然找不到NetworkPlugin了。排除了其他因素,发现是受到了spring boot框架的影响。spring boot自身集成了Elasticsearch,如果没有在pom文件里直接引用elasticsearch-5.2.2,它会默认使用低版本的elasticsearch。本来考虑使用spring boot整合的elasticsearch,但是它支持的版本比较低,不适用于我们的情况。
报错2:找不到NetworkPlugin
Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPluginat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)at java.net.URLClassLoader.access$100(URLClassLoader.java:73)at java.net.URLClassLoader$1.run(URLClassLoader.java:368)at java.net.URLClassLoader$1.run(URLClassLoader.java:362)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:361)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at org.elasticsearch.transport.client.PreBuiltTransportClient.<clinit>(PreBuiltTransportClient.java:84)at com.iflytek.ocp.utils.ElasticSearchUtil.init(ElasticSearchUtil.java:107)at com.iflytek.ocp.adapter.AdapterApplication.init(AdapterApplication.java:325)at com.iflytek.ocp.adapter.AdapterApplication.main(AdapterApplication.java:38)Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.NetworkPluginat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 16 more
报错3:ES日志打印的问题,必须加上org.apache.logging.log4j的包。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Levelat org.elasticsearch.common.logging.ESLoggerFactory.<clinit>(ESLoggerFactory.java:38)at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:105)at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:72)at org.elasticsearch.common.component.AbstractComponent.<init>(AbstractComponent.java:37)at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:98)at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:99)at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:124)at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:258)at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:125)at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:111)at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:101)at com.iflytek.ocp.utils.ElasticSearchUtil.init(ElasticSearchUtil.java:107)at com.iflytek.ocp.adapter.AdapterApplication.init(AdapterApplication.java:325)at com.iflytek.ocp.adapter.AdapterApplication.main(AdapterApplication.java:38)Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Levelat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
总结:1、JDK1.8及以上;2、不仅要使用org.elasticsearch.client包,也要使用elasticsearch-5.2.2包;3、使用org.apache.logging.log4j日志包
pom文件,maven引用:
<!--elasticsearch --><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.7</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version></dependency>
Elasticsearch中文教程推荐:https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/
- spring boot项目,Elasticsearch的一种使用方式
- Spring Boot 普通类调用Bean对象的一种方式
- elasticsearch,spring boot,mybatis项目小结
- 使用Spring Boot的两种方式
- spring-boot项目启动方式
- Spring boot + elasticsearch的最简单实践
- Spring Boot 微服务项目的推荐部署方式
- spring boot项目在eclipse中的web的启动方式
- Spring Boot + Elasticsearch
- SPRING BOOT+ELASTICSEARCH+RABBITMQ
- 使用spring boot快速构建spring框架的maven项目
- Spring Boot项目使用Flyway
- spring boot 项目三种启动方式
- Spring Boot项目几种创建方式
- Spring Boot 项目几种启动方式
- Spring-Boot Mybatis使用xml方式的配置
- spring boot的发布方式
- ELK第七篇:spring-boot-starter-data-elasticsearch使用
- 麦瘟病(wheat blast)是什么鬼
- Atom编辑器
- postman学习
- 消息处理之performSelector
- 拨盘Demo大赛,获奖公布-20170710
- spring boot项目,Elasticsearch的一种使用方式
- hibernate数据库方言
- 自定义弹窗跳到app商店评价进行评分
- [LeetCode]630. Course Schedule III
- zoj1944Tree Recovery 数据结构
- java 简单的聊天工具 (带界面的)
- 安装vue.js的方法
- 使用pinctrl子系统实现引脚功能动态切换
- 创建项目时 building “XXX”gradle project info的解决办法