为了账号安全,请及时绑定邮箱和手机立即绑定

elasticsearch-rest-client遇到的坑

标签:
AngularJS ZBrush

elasticsearch 版本 6.2.4(写该文章的时候已经发布了6.3了)

maven管理。

根据官方介绍:只要在pom.xml 加入依赖

Here is how you can configure the dependency using maven as a dependency manager. Add the following to your pom.xml file:

org.elasticsearch.client elasticsearch-rest-high-level-client 6.2.4

加入之后查看依赖(打开pom文件,点击dependency Hierarchy)

看到依赖呢跟官网介绍的一样。

这里顺便看看elasticseatch的依赖(因为我跟在跟项目整合时候这个依赖除了问题),如下图看出是依赖了,lucene7.2.1的版本

开始编码:

根据官方demo:

package com.example.demo;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;

public class e

{

public static void main(String[] args)

{

RestHighLevelClient client = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”, 9200, “http”),

new HttpHost(“localhost”, 9201, “http”)));

System.out.println(client);

}

}

运行报错:java.lang.UnsupportedClassVersionError: com/example/demo/e : Unsupported major.minor version 52.0

这个问题百度一下很好解决:就是JDK版本问题,配置下JDK

在重新运行,没问题了。。。。

为什么要这样实例化呢,也没有文档好参考的。只能看源码:

RestHighLevelClient.java 源码可以看出来。

这个RestHighLevelClient类能使用的构造方法都是需要 RestClient 实例,所以我们需要实例化RestClient

接着我们开RestClient的源码,

找到两个可以实例化的,构造,简单起见我们采用第二种。

然后就是对Elastic的增加,删除,修改等

这样一个简答你的demo可以实现了。

然后就打算加到项目里面使用。问题就来了。

报错:Exception in thread “main” java.lang.NoSuchFieldError: LUCENE_6_0_0

进去看第44行错误

说是 LUCENE_6_0_0 这个不存在,于是在吧代码复制到,运行环境里面,果然报错。

我们来看看LUCENE_6_0_0 存在哪个jar里面,鼠标跟进去,发现是在lucene-core下的。这个定义在7.2存在,但是我们允许发现没有,估计是这个jar冲突了,运行富贵论坛
时候使用的不是这个版本。

然后我们看下依赖:发现在添加到项目里面发现,部分lucene的版本变成3.5.0。

我的解决办法是,直接在pom文件里面指定这个jar的版本

org.apache.lucene

lucene-core

7.2.1

添加完在看看依赖:lucene-core的版本上去了,同理其他版本意这样改回去。

改了版本,能就能正常建立连接了。

总结

开发没问问题,运行的时候报,类,方法,变量找不到这个多半就是jar冲突了。

快速丁文重提jar问题,百度百科有方法:https://jingyan.baidu.com/article/7082dc1c0fdf51e40a89bde1.html

最后还有一个坑,由于我的项目是maven管理的web项目。所以jar包使用maven管理,由于发布时候,会吧jar放到web项目的WEB-INF/lib/,在tomcat部署的时候会把lib的jar和maven的jar合并,在部署,所以,maven依赖问题解决了,还有问题,直接看项目运行的实际代码有没有冲突。方法eclips在服务器部署项目,点击browse deployment location 就会跳转到tomcat实际运行的代码中,直接查看lib。

使用maven 经常会发现实际运行代跟开发的不一致,本质就是I,你开发完了的代码没有更新到运行环境中。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消