You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Matt Mitchell <mw...@virginia.edu> on 2007/09/11 15:36:57 UTC
Using Ruby to POST to Solr
Hi, I just posted this to the ruby/google group. It probably belongs
here! Also, anyone know exactly what the @ symbol in the curl command
is doing?
Thanks,
Matt
I've got a script that uses curl, and would like (for educational
purposes mind you) to use ruby instead. This is the curl command that
works:
F="./my_data.xml"
curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
type:text/xml; charset=utf-8'
I've been messing with Net::Http using something like below, with
variations (Base64.encode64) but nothing works yet. Anyone know the
ruby equivlent to the curl version above?
Thanks!
# NOT WORKING:
my_url = 'http://localhost:8080/update'
data = File.read('my_data.xml')
url = URI.parse(my_url)
post = Net::HTTP::Post.new(url.path)
post.body = data
post.content_type = 'application/x-www-form-urlencoded; charset=utf-8'
response = Net::HTTP.start(url.host, url.port) do |http|
http.request(post)
end
puts response.body
Re: Using Ruby to POST to Solr
Posted by Matt Mitchell <mw...@virginia.edu>.
Yes! Beautiful. I'll be checking that out.
matt
On Sep 11, 2007, at 12:18 PM, Erik Hatcher wrote:
> Matt,
>
> Try this instead:
>
> gem install solr-ruby # ;)
>
> Then in irb or wherever:
>
> solr = Solr::Connection.new("http://localhost:8983/solr")
> solr.add(:id => 123, :title => "<insert title here>")
> solr.commit
> solr.query("title")
>
> Visit us over on the ruby-dev@lucene.apache.org e-mail list for
> more on working with Solr from Ruby.
>
> Erik
>
>
> On Sep 11, 2007, at 10:55 AM, Matt Mitchell wrote:
>
>> Hi Michael,
>>
>> Thanks for that. I've got something that's working now:
>>
>> data = File.read('my_solr_docs.xml')
>> url = URI.parse('http://localhost:8080/my_solr/update')
>> http = Net::HTTP.new(url.host, url.port)
>> response, body = http.post(url.path, data, {'Content-type'=>'text/
>> xml; charset=utf-8'})
>>
>> Matt
>>
>> On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:
>>
>>> The curl man page states:
>>>
>>> If you start the data with the letter @, the rest
>>> should be a
>>> file name to read the data from, or - if you want curl to read
>>> the data
>>> from stdin. The contents of the file must
>>> already be
>>> url-encoded. Multiple files can also be specified. Posting data
>>> from a file
>>> named 'foobar' would thus be done with --data
>>> @foobar".
>>>
>>>
>>>
>>>
>>> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>>>
>>>> Hi, I just posted this to the ruby/google group. It probably
>>>> belongs
>>>> here! Also, anyone know exactly what the @ symbol in the curl
>>>> command
>>>> is doing?
>>>> Thanks,
>>>> Matt
>>>>
>>>>
>>>> I've got a script that uses curl, and would like (for educational
>>>> purposes mind you) to use ruby instead. This is the curl command
>>>> that
>>>> works:
>>>>
>>>> F="./my_data.xml"
>>>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>>>> type:text/xml; charset=utf-8'
>>>>
>>>> I've been messing with Net::Http using something like below, with
>>>> variations (Base64.encode64) but nothing works yet. Anyone know the
>>>> ruby equivlent to the curl version above?
>>>>
>>>> Thanks!
>>>>
>>>> # NOT WORKING:
>>>> my_url = 'http://localhost:8080/update'
>>>> data = File.read('my_data.xml')
>>>> url = URI.parse(my_url)
>>>> post = Net::HTTP::Post.new(url.path)
>>>> post.body = data
>>>> post.content_type = 'application/x-www-form-urlencoded;
>>>> charset=utf-8'
>>>> response = Net::HTTP.start(url.host, url.port) do |http|
>>>> http.request(post)
>>>> end
>>>> puts response.body
>>>
>>>
>>>
>>>
>>> --
>>> Michael Kimsal
>>> http://webdevradio.com
>>
>> Matt Mitchell
>> Digital Scholarship Services
>> Box 400129
>> Alderman Library
>> University of Virginia
>> Charlottesville, VA 22904
>>
>> mwm4n@virginia.edu
>>
>>
Matt Mitchell
Digital Scholarship Services
Box 400129
Alderman Library
University of Virginia
Charlottesville, VA 22904
mwm4n@virginia.edu
Re: Using Ruby to POST to Solr
Posted by Erik Hatcher <er...@ehatchersolutions.com>.
Matt,
Try this instead:
gem install solr-ruby # ;)
Then in irb or wherever:
solr = Solr::Connection.new("http://localhost:8983/solr")
solr.add(:id => 123, :title => "<insert title here>")
solr.commit
solr.query("title")
Visit us over on the ruby-dev@lucene.apache.org e-mail list for more
on working with Solr from Ruby.
Erik
On Sep 11, 2007, at 10:55 AM, Matt Mitchell wrote:
> Hi Michael,
>
> Thanks for that. I've got something that's working now:
>
> data = File.read('my_solr_docs.xml')
> url = URI.parse('http://localhost:8080/my_solr/update')
> http = Net::HTTP.new(url.host, url.port)
> response, body = http.post(url.path, data, {'Content-type'=>'text/
> xml; charset=utf-8'})
>
> Matt
>
> On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:
>
>> The curl man page states:
>>
>> If you start the data with the letter @, the rest
>> should be a
>> file name to read the data from, or - if you want curl to read the
>> data
>> from stdin. The contents of the file must
>> already be
>> url-encoded. Multiple files can also be specified. Posting data
>> from a file
>> named 'foobar' would thus be done with --data @foobar".
>>
>>
>>
>>
>> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>>
>>> Hi, I just posted this to the ruby/google group. It probably belongs
>>> here! Also, anyone know exactly what the @ symbol in the curl
>>> command
>>> is doing?
>>> Thanks,
>>> Matt
>>>
>>>
>>> I've got a script that uses curl, and would like (for educational
>>> purposes mind you) to use ruby instead. This is the curl command
>>> that
>>> works:
>>>
>>> F="./my_data.xml"
>>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>>> type:text/xml; charset=utf-8'
>>>
>>> I've been messing with Net::Http using something like below, with
>>> variations (Base64.encode64) but nothing works yet. Anyone know the
>>> ruby equivlent to the curl version above?
>>>
>>> Thanks!
>>>
>>> # NOT WORKING:
>>> my_url = 'http://localhost:8080/update'
>>> data = File.read('my_data.xml')
>>> url = URI.parse(my_url)
>>> post = Net::HTTP::Post.new(url.path)
>>> post.body = data
>>> post.content_type = 'application/x-www-form-urlencoded;
>>> charset=utf-8'
>>> response = Net::HTTP.start(url.host, url.port) do |http|
>>> http.request(post)
>>> end
>>> puts response.body
>>
>>
>>
>>
>> --
>> Michael Kimsal
>> http://webdevradio.com
>
> Matt Mitchell
> Digital Scholarship Services
> Box 400129
> Alderman Library
> University of Virginia
> Charlottesville, VA 22904
>
> mwm4n@virginia.edu
>
>
Re: Using Ruby to POST to Solr
Posted by Matt Mitchell <mw...@virginia.edu>.
Hi Michael,
Thanks for that. I've got something that's working now:
data = File.read('my_solr_docs.xml')
url = URI.parse('http://localhost:8080/my_solr/update')
http = Net::HTTP.new(url.host, url.port)
response, body = http.post(url.path, data, {'Content-type'=>'text/
xml; charset=utf-8'})
Matt
On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:
> The curl man page states:
>
> If you start the data with the letter @, the rest
> should be a
> file name to read the data from, or - if you want curl to read the
> data
> from stdin. The contents of the file must
> already be
> url-encoded. Multiple files can also be specified. Posting data
> from a file
> named 'foobar' would thus be done with --data @foobar".
>
>
>
>
> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>
>> Hi, I just posted this to the ruby/google group. It probably belongs
>> here! Also, anyone know exactly what the @ symbol in the curl command
>> is doing?
>> Thanks,
>> Matt
>>
>>
>> I've got a script that uses curl, and would like (for educational
>> purposes mind you) to use ruby instead. This is the curl command that
>> works:
>>
>> F="./my_data.xml"
>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>> type:text/xml; charset=utf-8'
>>
>> I've been messing with Net::Http using something like below, with
>> variations (Base64.encode64) but nothing works yet. Anyone know the
>> ruby equivlent to the curl version above?
>>
>> Thanks!
>>
>> # NOT WORKING:
>> my_url = 'http://localhost:8080/update'
>> data = File.read('my_data.xml')
>> url = URI.parse(my_url)
>> post = Net::HTTP::Post.new(url.path)
>> post.body = data
>> post.content_type = 'application/x-www-form-urlencoded;
>> charset=utf-8'
>> response = Net::HTTP.start(url.host, url.port) do |http|
>> http.request(post)
>> end
>> puts response.body
>
>
>
>
> --
> Michael Kimsal
> http://webdevradio.com
Matt Mitchell
Digital Scholarship Services
Box 400129
Alderman Library
University of Virginia
Charlottesville, VA 22904
mwm4n@virginia.edu
Re: Using Ruby to POST to Solr
Posted by Michael Kimsal <mg...@gmail.com>.
The curl man page states:
If you start the data with the letter @, the rest should be a
file name to read the data from, or - if you want curl to read the data
from stdin. The contents of the file must already be
url-encoded. Multiple files can also be specified. Posting data from a file
named 'foobar' would thus be done with --data @foobar".
On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>
> Hi, I just posted this to the ruby/google group. It probably belongs
> here! Also, anyone know exactly what the @ symbol in the curl command
> is doing?
> Thanks,
> Matt
>
>
> I've got a script that uses curl, and would like (for educational
> purposes mind you) to use ruby instead. This is the curl command that
> works:
>
> F="./my_data.xml"
> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
> type:text/xml; charset=utf-8'
>
> I've been messing with Net::Http using something like below, with
> variations (Base64.encode64) but nothing works yet. Anyone know the
> ruby equivlent to the curl version above?
>
> Thanks!
>
> # NOT WORKING:
> my_url = 'http://localhost:8080/update'
> data = File.read('my_data.xml')
> url = URI.parse(my_url)
> post = Net::HTTP::Post.new(url.path)
> post.body = data
> post.content_type = 'application/x-www-form-urlencoded; charset=utf-8'
> response = Net::HTTP.start(url.host, url.port) do |http|
> http.request(post)
> end
> puts response.body
--
Michael Kimsal
http://webdevradio.com