2

これを行うには助けが必要です。Apache Solr インスタンスに対してクエリを実行するには、次の URL を作成する必要があります。

http://localhost:8080/solr/select?q=*%3A*&fq=deal_discount%3A[20+TO+*]&fq=deal_price%3A[*+TO+100]&fq={!geofilt+pt%3D45.6574%2C9.9627+sfield%3Dlocation_latlng+d%3D600}

ご覧のとおり、URL には「fq」という名前のパラメーターが 3 回含まれています。私が疑問に思っているのは、parse() メソッドの 2 番目の引数である Hash 内でパラメーター「fq」を 3 回渡す必要がある場合に URI.parse() メソッドを使用する方法です。

簡単なスニペットを次に示します。

path = 'http://localhost:8080/solr/select'
pars = { 'fq' => 'deal_price [* TO 100]', 'fq' => '{!geofilt pt=45.6574,9.9627 sfield=location_latlng d=600}' } # This is obviously wrong!
res = Net::HTTP::post_form( URI.parse(path), pars )

解決策は完全な URL を文字列として渡すことですが、この種の署名を提供するメソッドが見つかりません。

私の問題に対する簡単な解決策を投稿していただけますか? 前もって感謝します。

4

2 に答える 2

1

助けてくれてありがとう。はい、そうです... get メソッドが必要でした。とにかく、Net:HTTP.get() が「Unknown method hostname」という例外をスローしたため、コードを少し変更する必要がありました。

uri = URI(solrUrl)
req = Net::HTTP::Get.new(uri.request_uri)
res = Net::HTTP.start(uri.hostname, uri.port) {|http|
   http.request(req)
}

これで私の問題は解決しました。本当にありがとう。

于 2012-12-08T21:56:11.490 に答える
0

あなたの URL は、HTTP GET を使用して solr をクエリする必要があることを示唆していますが、スニペットは POST を使用しているため、これを変更する必要があります。しかし、主な問題はパラメーターにあると思います。ハッシュにはキーのエントリが1つしか含まれていない可能性があるため、この場合はハッシュを使用できません。簡単な方法の 1 つは、手動で URL を作成することです。

params_array = ['deal_price [* TO 100]', 
  '{!geofilt pt=45.6574,9.9627 sfield=location_latlng d=600}']
base_url = "http://localhost:8080/solr/select"
query_string = "?fq=#{params_array.join('&fq=')}"
url = base_url + query_string
result = Net::HTTP.get url

少しコンパクトかもしれません-より読みやすいバージョンは次のとおりです(好みによる):

params_array = ['deal_price [* TO 100]', 
  '{!geofilt pt=45.6574,9.9627 sfield=location_latlng d=600}']
url = "http://localhost:8080/solr/select&"
params_array.each do |param|
  url << "&fq=#{param}"
end
result = Net::HTTP.get url
于 2012-12-08T20:17:27.503 に答える