首页 > 解决方案 > 弹性搜索(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)的完整示例项目吗?

任何帮助表示赞赏。

标签: elasticsearch

解决方案


这是我必须在一个全新的 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>

推荐阅读