pasar los datos json en elasticsearch obtener solicitud usando rub-gem rub-rest

¿Cómo ejecuto la siguiente consulta (dada en el documento ) usando rest client?

curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{ "query" : { "term" : { "user" : "kimchy" } } } ' 

Intenté hacer esto:

 q = '{ "query" : { "term" : { "user" : "kimchy" } } } ' r = JSON.parse(RestClient.get('http://localhost:9200/twitter/tweet/_search', q)) 

Esto arrojó un error:

 in `process_url_params': undefined method `delete_if' for # (NoMethodError) from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:40:in `initialize' from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `new' from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient.rb:68:in `get' from get_check2.rb:12:in `' 

Cuando hago lo mismo con RestClient.post , me da los resultados correctos. Pero el documento XGET utiliza XGET en el comando curl para la consulta de búsqueda y no XPOST . ¿Cómo consigo que el método RestClient.get funcione?

Si hay formas alternativas / mejores de hacer esta acción, por favor sugiera.

RestClient no puede enviar cuerpos de solicitud con GET . Tienes dos opciones:

Pase su consulta como el parámetro URL de source :

 require 'rest_client' require 'json' # RestClient.log=STDOUT # Optionally turn on logging q = '{ "query" : { "term" : { "user" : "kimchy" } } } ' r = JSON.parse \ RestClient.get( 'http://localhost:9200/twitter/tweet/_search', params: { source: q } ) puts r 

… o simplemente usar POST .


ACTUALIZACIÓN: Se corrigió el paso incorrecto del parámetro de URL, observe el hash de params .

En caso de que alguien más encuentre esto. Es posible, aunque no se recomienda, enviar cuerpos de solicitud con GET utilizando el método de solicitud interno que utiliza la API principal para crear sus llamadas.

 RestClient::Request.execute( method: :get, url: 'http://localhost:9200/twitter/tweet/_search', payload: {source: q} ) 

Vea aquí para más detalles.