elasticsearch - 弹性搜索(6.2.4)使用 RestHighLevelClient 连接
问题描述
我一直在尝试使用 Java 1.8 使用 RestHighLevelClient 连接到弹性搜索(6.2.4)。我已经添加了所有依赖项,并且在一个简单的 jsp 中使用了以下代码。
示例.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="java.util.*" %>
<%@page import="java.io.*" %>
<%@page import="com.google.gson.*" %>
<%@page import="org.apache.http.*"%>
<%@page import= "org.elasticsearch.client.*"%>
<%@page import= "org.elasticsearch.common.document.*"%>
<%@page import= "org.elasticsearch.index.query.*"%>
<%@page import= "org.elasticsearch.action.get.*"%>
<%@page import= "org.elasticsearch.search.*"%>
<%@page import= "org.elasticsearch.search.fetch.subphase.*"%>
<%@page import= "org.elasticsearch.search.builder.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Elastic Report</title>
</head>
<body>
<%
RestHighLevelClient client=null;
Gson gson = new Gson();
try{
client = new RestHighLevelClient(
RestClient.builder(new HttpHost("xx.yy.xx.zz", 9201, "http")));
GetRequest getRequest = new GetRequest(
"samples",
"sample",
"xxxxxxxxxx");
String[] includes = new String[]{"ip"};
String[] excludes = {};
FetchSourceContext fetchSourceContext =
new FetchSourceContext(true, includes, excludes);
getRequest.fetchSourceContext(fetchSourceContext);
GetResponse getResponse = client.get(getRequest);
if(getResponse.isExists()){
Map<String,DocumentField> fields = getResponse.getFields();
String json = gson.toJson(fields);
out.write(json);
}
client.close();
}
catch(Exception ex){
ex.printStackTrace();
}
%>
</body>
</html>
添加了所有依赖项,这是我的 Eclipse 快照
但是,一旦我在 Eclipse 上启动我的 tomcat,我会立即收到以下错误
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/elasticsearch/common/logging/Loggers
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:462)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/elasticsearch/common/logging/Loggers
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:916)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:845)
org.apache.jsp.elasticsearch_jsp._jspService(elasticsearch_jsp.java:140)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
jar 中没有 Loggers 类(6.2.4 版本)
但是,一旦我刷新页面,我就会收到以下错误
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.common.ParseField
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:462)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.common.ParseField
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:916)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:845)
org.apache.jsp.elasticsearch_jsp._jspService(elasticsearch_jsp.java:140)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我已经能够在扩展包中找到 ParseField 类。但是应用程序失败并出现 No class found 错误
谁能让我知道我在这里犯了什么错误?另外,任何人都可以指出我使用 RestHighlevelclient 并包含所有依赖项(jar)的完整示例项目吗?
任何帮助表示赞赏。
解决方案
这是我必须在一个全新的 maven 项目中使用的 JAR 列表,以使您的示例代码正常工作:
-rw-r--r-- 1 cth 1049089 58411 Aug 24 14:31 aggs-matrix-stats-client-6.2.4.jar
-rw-r--r-- 1 cth 1049089 284184 Oct 4 2017 commons-codec-1.10.jar
-rw-r--r-- 1 cth 1049089 62050 Aug 7 2017 commons-logging-1.1.3.jar
-rw-r--r-- 1 cth 1049089 9929279 Aug 24 14:31 elasticsearch-6.2.4.jar
-rw-r--r-- 1 cth 1049089 15884 Aug 24 14:31 elasticsearch-cli-6.2.4.jar
-rw-r--r-- 1 cth 1049089 19163 Aug 24 14:31 elasticsearch-core-6.2.4.jar
-rw-r--r-- 1 cth 1049089 38473 Aug 24 14:31 elasticsearch-rest-client-6.2.4.jar
-rw-r--r-- 1 cth 1049089 34071 Aug 24 14:30 elasticsearch-rest-high-level-client-6.2.4.jar
-rw-r--r-- 1 cth 1049089 39452 Aug 24 14:33 gson-2.6.1.jar
-rw-r--r-- 1 cth 1049089 231952 Aug 24 14:33 gson-2.8.0.jar
-rw-r--r-- 1 cth 1049089 114165 Aug 1 11:38 HdrHistogram-2.1.9.jar
-rw-r--r-- 1 cth 1049089 1140290 Jul 27 2017 hppc-0.7.1.jar
-rw-r--r-- 1 cth 1049089 177112 Aug 1 11:38 httpasyncclient-4.1.2.jar
-rw-r--r-- 1 cth 1049089 736658 Aug 22 2017 httpclient-4.5.2.jar
-rw-r--r-- 1 cth 1049089 327373 Aug 1 13:41 httpcore-4.4.5.jar
-rw-r--r-- 1 cth 1049089 356201 Aug 1 11:38 httpcore-nio-4.4.5.jar
-rw-r--r-- 1 cth 1049089 282634 Aug 24 14:31 jackson-core-2.8.10.jar
-rw-r--r-- 1 cth 1049089 50728 Aug 24 14:31 jackson-dataformat-cbor-2.8.10.jar
-rw-r--r-- 1 cth 1049089 73889 Aug 24 14:31 jackson-dataformat-smile-2.8.10.jar
-rw-r--r-- 1 cth 1049089 40881 Aug 24 14:31 jackson-dataformat-yaml-2.8.10.jar
-rw-r--r-- 1 cth 1049089 885297 Aug 24 14:31 jna-4.5.1.jar
-rw-r--r-- 1 cth 1049089 634048 Aug 24 14:31 joda-time-2.9.9.jar
-rw-r--r-- 1 cth 1049089 78074 Aug 1 11:38 jopt-simple-5.0.2.jar
-rw-r--r-- 1 cth 1049089 794991 Jul 27 2017 jts-1.13.jar
-rw-r--r-- 1 cth 1049089 239856 Aug 3 09:21 log4j-api-2.9.1.jar
-rw-r--r-- 1 cth 1049089 1549865 Aug 3 09:21 log4j-core-2.9.1.jar
-rw-r--r-- 1 cth 1049089 1621932 Aug 24 14:31 lucene-analyzers-common-7.2.1.jar
-rw-r--r-- 1 cth 1049089 98904 Aug 24 14:31 lucene-backward-codecs-7.2.1.jar
-rw-r--r-- 1 cth 1049089 2792335 Aug 24 14:31 lucene-core-7.2.1.jar
-rw-r--r-- 1 cth 1049089 87166 Aug 24 14:31 lucene-grouping-7.2.1.jar
-rw-r--r-- 1 cth 1049089 197790 Aug 24 14:31 lucene-highlighter-7.2.1.jar
-rw-r--r-- 1 cth 1049089 146135 Aug 24 14:31 lucene-join-7.2.1.jar
-rw-r--r-- 1 cth 1049089 46969 Aug 24 14:31 lucene-memory-7.2.1.jar
-rw-r--r-- 1 cth 1049089 91675 Aug 24 14:31 lucene-misc-7.2.1.jar
-rw-r--r-- 1 cth 1049089 258756 Aug 24 14:31 lucene-queries-7.2.1.jar
-rw-r--r-- 1 cth 1049089 384677 Aug 24 14:31 lucene-queryparser-7.2.1.jar
-rw-r--r-- 1 cth 1049089 183425 Aug 24 14:31 lucene-sandbox-7.2.1.jar
-rw-r--r-- 1 cth 1049089 284757 Aug 24 14:31 lucene-spatial3d-7.2.1.jar
-rw-r--r-- 1 cth 1049089 14432 Aug 24 14:31 lucene-spatial-7.2.1.jar
-rw-r--r-- 1 cth 1049089 228843 Aug 24 14:31 lucene-spatial-extras-7.2.1.jar
-rw-r--r-- 1 cth 1049089 249543 Aug 24 14:31 lucene-suggest-7.2.1.jar
-rw-r--r-- 1 cth 1049089 76149 Aug 24 14:31 parent-join-client-6.2.4.jar
-rw-r--r-- 1 cth 1049089 58585 Aug 24 14:31 rank-eval-client-6.2.4.jar
-rw-r--r-- 1 cth 1049089 7465 Aug 24 14:31 securesm-1.2.jar
-rw-r--r-- 1 cth 1049089 273599 Oct 31 2017 snakeyaml-1.17.jar
-rw-r--r-- 1 cth 1049089 187537 Aug 24 14:31 spatial4j-0.6.jar
-rw-r--r-- 1 cth 1049089 49754 Jul 27 2017 t-digest-3.0.jar
这是 pom (如果你也有 maven 就很有用)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>elastictest</groupId>
<artifactId>elastictest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.test.failure.ignore>false</maven.test.failure.ignore>
<maven.javadoc.skip>true</maven.javadoc.skip>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<log4j.version>2.5</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.4</version>
</dependency>
<dependency>
<groupId>org.immutables</groupId>
<artifactId>gson</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
<build>
<finalName>elastictest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
推荐阅读
- java - 是否可以使用 springboot 注释 @Value 从 application.properties 文件中获取 Map 值
- hybris - Impex 导出:多值属性中的冒号被双反斜杠转义 - 如何删除此行为?
- ionic-framework - 离子框架(events.js:183)未处理的“错误”事件
- c# - 我需要获取特定窗口的声级
- java - 在此行找到多个注释:未找到工厂 bean
- java - Jackson Deserializer 委托给下一个适用的反序列化器
- azure - 从 Azure Active Directory 检查 MVC 应用程序中用户的角色以获得授权
- javascript - Angular JS 脚本适用于 Firefox 不适用于 IE 11
- visual-studio - TFS 构建失败,消息为零错误 - 进程“msbuild.exe”以代码“1”退出
- php - 在数据库中使用 Ajax 和 PHP 在 wordpress 中插入复选框值