如何使用Rest Client 执行以下查询(在doc中给出)。
curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{ "query" : { "term" : { "user" : "kimchy" } } } '
我尝试这样做:
q = '{ "query" : { "term" : { "user" : "kimchy" } } } ' r = JSON.parse(RestClient.get('http://localhost:9200/twitter/tweet/_search', q))
这引发了一个错误:
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>'
当我使用进行相同的操作时RestClient.post,它会给我正确的结果!但是elasticsearch doc XGET在curl命令中使用的不是搜索查询XPOST。我该如何使用该RestClient.get方法?
RestClient.post
XGET
XPOST
RestClient.get
如果有其他/更好的方法来执行此操作,请提出建议。
RestClient无法使用发送请求正文GET。您有两种选择:
GET
将查询作为sourceURL参数传递:
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
…或只是使用POST。
POST
更新: 修复了URL参数的错误传递,请注意params哈希。
params