rails ruby elasticsearch rest-client

rails - pasando los datos json en elasticsearch get request usando rest-client ruby ​​gem



elasticsearch model gem (2)

¿Cómo ejecuto la consulta siguiente (dada en doc ) usando el cliente de reposo?

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 #<String:0x8b12e18> (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 `<main>''

Cuando hago lo mismo usando RestClient.post , ¡me da los resultados correctos !. Pero el documento elásticosearch utiliza el XGET in curl para la consulta de búsqueda y no XPOST . ¿Cómo hago para que RestClient.get método RestClient.get ?

Si hay formas alternativas / mejores para realizar esta acción, sugiéralas.


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 usa POST .

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


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

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

Mira aquí para más detalles.