Hi there,
I am quite new to use Elasticsearch in my Java project to index Reddit post and I am kindly asking for your help.
I have installed Elasticsearch 5.2.0 together with Kibana and logstash. X-Pack was installed for Elasticsearch 5.2 and Kibana, but I was not able to install X-Pack with logstash (Error: Something went wrong when installing x-pack, message can't dup Nilclass)
I left Elasticsearch mostly untouched only changing the cluster name and added a new user.
Calling localhost:9200 returns
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "gC7rZjBcRuu9jm71Kt15AQ",
"version" : {
"number" : "5.2.0",
"build_hash" : "24e05b9",
"build_date" : "2017-01-24T19:52:35.800Z",
"build_snapshot" : false,
"lucene_version" : "6.4.0"
},
"tagline" : "You Know, for Search"
}
When I now would like to connect my Java application with Elasticsearch I get a
Exception in thread "main" java.lang.NoSuchFieldError: connectTimeout
at org.elasticsearch.transport.netty4.Netty4Transport.createBootstrap(Netty4Transport.java:206)
at org.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:171)
at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69)
at org.elasticsearch.transport.TransportService.doStart(TransportService.java:202)
at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:198)
at org.elasticsearch.client.transport.TransportClient.(TransportClient.java:258)
at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:125)
at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:111)
at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:101)
at qualitativeAnalysis.dbi.elasticsearch.AbstractConnector.connect(AbstractConnector.java:86)
at qualitativeAnalysis.textCrawler.reddit.Main.main(Main.java:21)
After several tries I ended with this approach to connect which produces the Exception
public void connect() {
if (isConnected()) {
return;
}
String username = "java"; String password = "el4s7ic4java"; // Setup client configuration Settings settings = Settings.builder() .put("cluster.name", "elasticsearch") //.put("shield.user", username+":"+password) .put("client.transport.sniff", true) //.put("client.transport.ping_timeout", "60s") //.put("client.transport.nodes_sampler_interval", "5s") .build(); // Create Client instance, with needed plugins and settings _client = new PreBuiltTransportClient(Settings.EMPTY); //PreBuiltXPackTransportClient(settings); // .addPlugins(ShieldPlugin.class) // .settings(settings) // .build(); // Add server address LOGGER.debug("Connecting on " + _hostname + " ..."); _client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(_hostname, 9300))); setConnected(); LOGGER.debug("Sucessfully connected on " + _hostname);
}
I am using Gradle to manage my Java liberaries, here is my build.gradle
/*
- This build file was generated by the Gradle 'init' task.
- This generated file contains a sample Java project to get you started.
- For more details take a look at the Java Quickstart chapter in the Gradle
- user guide available at Java Quickstart - Gradle User Guide Version 3.3
*/
// Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'eclipse'
// In this section you declare where to find the dependencies of your project
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
//jcenter()
mavenCentral()maven { url "https://maven.elasticsearch.org/releases"
}
}
dependencies {
// The production code uses Guava
compile 'com.google.guava:guava:20.0'//QualitatitveAnalysis
// https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.7'// https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch
compile 'org.elasticsearch:elasticsearch:5.2.0'// https://mvnrepository.com/artifact/org.elasticsearch.client/transport
compile group: 'org.elasticsearch.client', name: 'transport', version: '5.1.2'// https://mvnrepository.com/artifact/org.elasticsearch.plugin/shield
compile group: 'org.elasticsearch.plugin', name: 'shield', version: '2.4.4'// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'// https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
compile group: 'org.twitter4j', name: 'twitter4j-core', version: '4.0.6'// https://mvnrepository.com/artifact/javax.json/javax.json-api
//compile group: 'javax.json', name: 'javax.json-api', version: '1.0'//jReddit Jar, compiled from src
compile files('libs/jReddit-1.0.4-SNAPSHOT.jar')
// Use JUnit test framework testCompile 'junit:junit:4.12'
}
If you would have to guess, I suspect an inconsistency between elasticsearch 5.2.0 with 'org.elasticsearch.client', name: 'transport', version: '5.1.2', but I was not able to find the 5.2.0 version of it.
Can you please help, many thanks in advance
Marcel