4

残りのクライアントを使用して、以下のクエリ ( 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 のドキュメントではXGET、検索クエリではなく、curl コマンドで使用されていXPOSTます。RestClient.getメソッドを機能させるにはどうすればよいですか?

このアクションを実行する代替/より良い方法がある場合は、提案してください。

4

2 に答える 2

5

RestClient は でリクエストボディを送信できませんGET。次の 2 つのオプションがあります。

sourceクエリをURL パラメーターとして渡します。

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


更新: URL パラメーターの誤った受け渡しを修正しましたparams。ハッシュに注意してください。

于 2012-10-20T17:16:54.407 に答える
1

他の誰かがこれを見つけた場合。推奨されませんが、メイン API が呼び出しを作成するために使用する内部 Request メソッドを使用して、GET でリクエスト本文を送信することは可能です。

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

詳しくはこちらをご覧ください。

于 2014-08-31T06:41:26.137 に答える