使用ES的时候遇到的问题:
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
at org.elasticsearch.common.xcontent.json.JsonXContent.<clinit>(JsonXContent.java:56)
at org.elasticsearch.common.xcontent.XContentType$1.xContent(XContentType.java:60)
at org.elasticsearch.common.settings.Setting.arrayToParsableString(Setting.java:868)
at org.elasticsearch.common.settings.Setting.lambda$listSetting$29(Setting.java:814)
at org.elasticsearch.common.settings.Setting$2.getRaw(Setting.java:818)
at org.elasticsearch.common.settings.Setting.lambda$listSetting$27(Setting.java:802)
at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:807)
at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:802)
at org.elasticsearch.common.network.NetworkService.<clinit>(NetworkService.java:50)
at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:98)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:126)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:130)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:116)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:106)
at com.es.demo.ESCliect.main(ESCliect.java:19)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 16 more
解决的方案:
需要手动再加一个jackson的jar进来
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
</dependencies>
测试的代码:
package com.es.demo;
import java.net.InetAddress;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class ESCliect {
public static void main(String[] args) throws Exception {
try {
//设置集群名称
Settings settings = Settings.builder().put("cluster.name", "ES001").build();
//创建client
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
//搜索数据
GetResponse response = client.prepareGet("index_test", "test", "1").execute().actionGet();
//输出结果
System.out.println(response.getSourceAsString());
//关闭client
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果是:
{
"title":"test",
"content":"test content"
}
注意:上面的(“index_test”, “test”, “1”),这个是之前存储在es中的index信息