searchresponse query example java elasticsearch

query - search request elasticsearch java



Java ElasticSearch Ninguno de los nodos configurados está disponible (10)

Acabo de descargar e instalar elasticsearch 1.3.2 en hora pasada

Tablas IP abiertas para los puertos 9200 y 9300: 9400

Establecer el nombre de mi computadora y mi ip en / etc / hosts

Módulo principal y paramédico instalado y funcionando sin problemas

curl en localhost funciona flawlessy

copiado todos los archivos jar de la descarga en eclipse para que la misma versión del cliente

--Java--

import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.index.query.QueryBuilders; public class Test{ public static void main(String[] args) { Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build(); TransportClient transportClient = new TransportClient(settings); Client client = transportClient.addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx",9300));//just masking ip with xxx for SO Question try{ SearchResponse response = client.prepareSearch().setQuery(QueryBuilders.matchQuery("url", "twitter")).setSize(5).execute().actionGet();//bunch of urls indexed String output = response.toString(); System.out.println(output); }catch(Exception e){ e.printStackTrace(); } client.close(); } }

--Salida--

log4j:WARN No appenders could be found for logger (org.elasticsearch.plugins). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:298) at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214) at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:105) at org.elasticsearch.client.support.AbstractClient.search(AbstractClient.java:330) at org.elasticsearch.client.transport.TransportClient.search(TransportClient.java:421) at org.elasticsearch.action.search.SearchRequestBuilder.doExecute(SearchRequestBuilder.java:1097) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) at Test.main(Test.java:20)

Actualización: ahora estoy REALMENTE confundido. Solo presioné correr en eclipse 3 veces. 2 veces recibió el error anterior. 1 vez que funcionó la búsqueda! Nuevo Centos 6.5 vps, jdk nuevo instalado. Luego instaló elasticsearch, no han hecho nada más para boxear.

Actualización: después de ejecutar la consola ./bin/elasticsearch

[2014-09-18 08:56:13,694][INFO ][node ] [Acrobat] version[1.3.2], pid[2978], build[dee175d/2014-08-13T14:29:30Z] [2014-09-18 08:56:13,695][INFO ][node ] [Acrobat] initializing ... [2014-09-18 08:56:13,703][INFO ][plugins ] [Acrobat] loaded [], sites [head, paramedic] [2014-09-18 08:56:15,941][WARN ][common.network ] failed to resolve local host, fallback to loopback java.net.UnknownHostException: elasticsearchtest: elasticsearchtest: Name or service not known at java.net.InetAddress.getLocalHost(InetAddress.java:1473) at org.elasticsearch.common.network.NetworkUtils.<clinit>(NetworkUtils.java:54) at org.elasticsearch.transport.netty.NettyTransport.<init>(NettyTransport.java:204) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:54) at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86) at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:57) at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45) at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.java:52) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:57) at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45) at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85) at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:57) at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45) at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85) at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98) at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.java:52) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:57) at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45) at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85) at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837) at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:57) at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45) at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:200) at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:193) at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:830) at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:193) at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175) at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:110) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70) at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:59) at org.elasticsearch.node.internal.InternalNode.<init>(InternalNode.java:192) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:70) at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:203) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32) Caused by: java.net.UnknownHostException: elasticsearchtest: Name or service not known at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) at java.net.InetAddress.getLocalHost(InetAddress.java:1469) ... 62 more [2014-09-18 08:56:16,937][INFO ][node ] [Acrobat] initialized [2014-09-18 08:56:16,937][INFO ][node ] [Acrobat] starting ... [2014-09-18 08:56:17,110][INFO ][transport ] [Acrobat] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/143.79.236.31:9300]} [2014-09-18 08:56:17,126][INFO ][discovery ] [Acrobat] elastictest/QvSNFajjQ9SFjU7WOdjaLw [2014-09-18 08:56:20,145][INFO ][cluster.service ] [Acrobat] new_master [Acrobat][QvSNFajjQ9SFjU7WOdjaLw][localhost][inet[/143.79.236.31:9300]], reason: zen-disco-join (elected_as_master) [2014-09-18 08:56:20,212][INFO ][http ] [Acrobat] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/143.79.236.31:9200]} [2014-09-18 08:56:20,214][INFO ][node ] [Acrobat] started

--configuración del clúster en elasticsearch.yml--

################################### Cluster ################################### # Cluster name identifies your cluster for auto-discovery. If you''re running # multiple clusters on the same network, make sure you''re using unique names. # cluster.name: elastictest


posible problema:

  1. puerto incorrecto, si usa un cliente Java o Scala, el puerto correcto es 9300 , no 9200
  2. nombre incorrecto del clúster, asegúrese de que el nombre del clúster que estableció en el código sea el mismo que el nombre del clúster que configuró en $ES_HOME/config/elasticsearch.yml
  3. la opción client.transport.sniff , establecer que client.transport.sniff sea true pero no se puede conectar a todos los nodos del clúster ES causará este problema también. ES doc aquí explica por qué.

Compruebe su elasticsearch.yml, la propiedad "transport.host" debe ser "0.0.0.0" no "127.0.0.1" o "localhost"


Debes verificar el puerto del nodo, puedes hacerlo usando la cabeza. Estos puertos no son lo mismo. Ejemplo,

La URL web que puede abrir es localhost:9200 , pero el puerto del nodo es 9300 , por lo que ninguno de los nodos configurados estará disponible si usa el 9200 como puerto.


Este sí me funcionó en ES 1.7.5:

import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentBuilder; public static void main(String[] args) throws IOException { Settings settings = ImmutableSettings.settingsBuilder() .put("client.transport.sniff",true) .put("cluster.name","elasticcluster").build(); Client client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("[ipaddress]",9300)); XContentBuilder builder = null; try { builder = jsonBuilder().startObject().field("user", "testdata").field("postdata",new Date()).field("message","testmessage") .endObject(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(builder.string()); IndexResponse response = client.prepareIndex("twitter","tweet","1").setSource(builder).execute().actionGet(); client.close();

}


Esto significa que no podemos instanciar ES transportClient y lanzar esta excepción. Hay un par de posibilidades que causan este problema.

  • El nombre del clúster es incorrecto. Así que abra el ES_HOME_DIR/config/elasticserach.yml y verifique el valor del nombre del clúster O use este comando: curl -XGET ''http://localhost:9200/_nodes''
  • Verifique que el puerto 9200 sea el puerto http, pero el servicio elástico busca el puerto tcp 9300 [de forma predeterminada]. Por lo tanto, verifique que el puerto no esté bloqueado.
  • Problema de autenticación: configure el encabezado en el contexto de transportClient para la autenticación:

    client.threadPool().getThreadContext() .putHeader("Authorization", "Basic " + encodeBase64String(basicHeader.getBytes()));

Si aún enfrenta este problema, agregue la siguiente propiedad:

put("client.transport.ignore_cluster_name", true)

El siguiente código básico funciona bien para mí:

Settings settings = Settings.builder() .put("cluster.name", "my-application").put("client.transport.sniff", true).put("client.transport.ignore_cluster_name", false).build(); TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));


Las configuraciones de $ES_HOME/config/elasticsearch.yml están en $ES_HOME/config/elasticsearch.yml . Allí, si la configuración cluster.name está comentada, significa que ES tomará casi cualquier nombre de clúster. Por lo tanto, en su código, el cluster.name como "elastictest" podría ser el problema. Prueba esto:

Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress( "143.79.236.xxx", 9300));


Para completar, aquí está el fragmento que crea el cliente de transporte usando el método estático proporcionado por InetSocketTransportAddress :

Client esClient = TransportClient.builder() .settings(settings) .build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("143.79.236.xxx"), 9300));



Se enfrentó a un problema similar, y aquí está la solución

Ejemplo:

  1. En elasticsearch.yml agrega las siguientes propiedades

    cluster.name: production node.name: node1 network.bind_host: 10.0.1.22 network.host: 0.0.0.0 transport.tcp.port: 9300

  2. Agregue lo siguiente en Java Elastic API para Bulk Push (solo un fragmento de código). Para la dirección IP agregue la dirección IP pública de la máquina de búsqueda elástica

    Client client; BulkRequestBuilder requestBuilder; try { client = TransportClient.builder().settings(Settings.builder().put("cluster.name", "production").put("node.name","node1")).build().addTransportAddress( new InetSocketTransportAddress(InetAddress.getByName(""), 9300)); requestBuilder = (client).prepareBulk(); } catch (Exception e) { }

  3. Abra los puertos del Firewall para 9200,9300


Si los consejos anteriores no funcionan para usted, cambie el nivel de registro de la configuración de su marco de trabajo de registro (log4j, logback ...) a INFO . Luego vuelva a verificar la salida.

El registrador puede estar ocultando mensajes como:

INFO org.elasticsearch.client.transport.TransportClientNodesService - failed to get node info for... Caused by: ElasticsearchSecurityException: missing authentication token for action...

(en el ejemplo anterior, había un complemento X-Pack en ElasticSearch que requiere autenticación)