mdwan-rsolr 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +157 -0
- data/LICENSE +67 -0
- data/README.rdoc +126 -0
- data/Rakefile +39 -0
- data/examples/direct.rb +27 -0
- data/examples/http.rb +22 -0
- data/lib/core_ext.rb +25 -0
- data/lib/mash.rb +148 -0
- data/lib/rsolr.rb +52 -0
- data/lib/rsolr/adapter.rb +6 -0
- data/lib/rsolr/adapter/direct.rb +86 -0
- data/lib/rsolr/adapter/http.rb +44 -0
- data/lib/rsolr/connection.rb +107 -0
- data/lib/rsolr/http_client.rb +140 -0
- data/lib/rsolr/http_client/adapter.rb +6 -0
- data/lib/rsolr/http_client/adapter/curb.rb +51 -0
- data/lib/rsolr/http_client/adapter/net_http.rb +48 -0
- data/lib/rsolr/message.rb +153 -0
- data/test/connection/direct_test.rb +25 -0
- data/test/connection/http_test.rb +18 -0
- data/test/connection/test_methods.rb +97 -0
- data/test/http_client/curb_test.rb +18 -0
- data/test/http_client/net_http_test.rb +12 -0
- data/test/http_client/test_methods.rb +40 -0
- data/test/http_client/util_test.rb +40 -0
- data/test/message_test.rb +107 -0
- metadata +93 -0
data/CHANGES.txt
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
0.8.2 - March 24, 2009
|
2
|
+
Changed RSolr.connect method to accept one options hash argument
|
3
|
+
- This hash gets passed to the Connection object and the adapter
|
4
|
+
Updated tests, examples and README.rdoc to reflect this change
|
5
|
+
Bumped the version up in gemspec and the RSolr module
|
6
|
+
|
7
|
+
0.8.1 - March 12, 2009
|
8
|
+
Added RSolr.escape and RSolr::Connection.new.escape
|
9
|
+
- tests in rsolr_test
|
10
|
+
Added ability to set doc and field attributes when adding documents via Message.add
|
11
|
+
|
12
|
+
0.8.0 - March 6, 2009
|
13
|
+
Removed all response wrapper classes (now returning a simple hash for ruby responses)
|
14
|
+
Removed RSolr::Query - this library needs an external partner lib, RSolrExt etc..
|
15
|
+
changed query method to select
|
16
|
+
added send_request method to Connection for custom requests:
|
17
|
+
send_request '/my-handler', {:start=>0}, post_data=nil
|
18
|
+
moved Connection::Base to Connection
|
19
|
+
moved Connection::Adapter::* to Adapter::*
|
20
|
+
|
21
|
+
0.7.1 - February 27, 2009
|
22
|
+
Added simple query helper module -> RSolr::Query
|
23
|
+
Added tests for RSolr::Query
|
24
|
+
Modified Test::Unit::TestCase in test/test_helpers.rb
|
25
|
+
|
26
|
+
0.7.0 - February 20, 2009
|
27
|
+
Removed all param mapping behavior, code and tests
|
28
|
+
- this stuff just gunks up rsolr and should be in an extension of some sort
|
29
|
+
Can now specify the request handler in all RSolr::Connection::Base methods as the first argument:
|
30
|
+
- solr.query 'select', :q=>'ipod'
|
31
|
+
- solr.query 'catalog', :q=>'humphry'
|
32
|
+
- solr.query :q=>'big' # defaults to the /select handler
|
33
|
+
|
34
|
+
0.6.9 - January 29, 2009
|
35
|
+
Simplified facet response methods
|
36
|
+
Main facet method is called #facets
|
37
|
+
- returns an array of Response::Facet instances
|
38
|
+
- each Facet instance has field and values attributes
|
39
|
+
-- the values attribute is an array with FacetValue instances which have @value and @hits
|
40
|
+
Added ability to set Connection::Base @param_adapters using :dismax or :standard
|
41
|
+
instead of full class constant
|
42
|
+
updated comments for #search method
|
43
|
+
Updated tests
|
44
|
+
Bumped up version
|
45
|
+
|
46
|
+
0.6.8 - January 28, 2009
|
47
|
+
New method added to RSolr::Connection::Base - #find_values_for_facet
|
48
|
+
This method searches for facet values only, and sets the :rows param to 0
|
49
|
+
- returns an RSolr::Response::Query::Base instance
|
50
|
+
Example:
|
51
|
+
search_params[:facets][:offset]=0
|
52
|
+
search_params[:facets][:limit]=5
|
53
|
+
response = solr.search_facet_by_name(:language_facet, search_params)
|
54
|
+
|
55
|
+
0.6.7 - January 27, 2009
|
56
|
+
The Symbol extension in core_ext.rb was cause for some REALLY painful debuging - so I removed it :(
|
57
|
+
This means no more :q.alt or :facet.field until RSolr gets a really nice query-builder module happening.
|
58
|
+
|
59
|
+
0.6.6 - January 26, 2009
|
60
|
+
Added #get method helper to RSolr::Response::Query::DocExt
|
61
|
+
# doc.get(key, opts)
|
62
|
+
# key is the name of the field
|
63
|
+
# opts is a hash with the following valid keys:
|
64
|
+
# - :sep - a string used for joining multivalued field values
|
65
|
+
# - :default - a value to return when the key doesn't exist
|
66
|
+
# if :sep is nil and the field is a multivalued field, the array is returned
|
67
|
+
|
68
|
+
0.6.5 - January 26, 2009
|
69
|
+
Removed to_mash everywhere, except for usage in RSolr::Response
|
70
|
+
Added a #close method to the Direct adapter
|
71
|
+
- this closes the connection and sets the @connection variable to nil
|
72
|
+
Removed to_mash in RSolr::Connection::Base
|
73
|
+
Changed RSolr::Response::Query::Doc to DocExt
|
74
|
+
- this no longer extends Mash
|
75
|
+
- each doc in the response now uses the #extend method to mixin the new DocExt module
|
76
|
+
Added #teardown method in direct connection test, this method closes the connection
|
77
|
+
Updated the connection test methods a bit
|
78
|
+
|
79
|
+
0.6.4 - January 26, 2009
|
80
|
+
Updated the mapping output for the :filters and :phrase_filters (when using the #search method)
|
81
|
+
- now sending multiple fq's instead of one
|
82
|
+
Updated mapping tests
|
83
|
+
|
84
|
+
0.6.3 - January 21, 2009
|
85
|
+
Added a new param mapping module: RSolr::Connection::ParamMapping
|
86
|
+
Mapping only for fields that need conversion/escaping or nested (facet.*) etc.
|
87
|
+
This new module can be activated by using the #search method
|
88
|
+
New tests for ParamMapping
|
89
|
+
|
90
|
+
0.6.2 - January 14, 2009
|
91
|
+
Removed mapping and indexer modules -- seems to me that a general purpose mapping library
|
92
|
+
would be more valuable than an embedded module in RSolr ( RMapper ?)
|
93
|
+
This helps lighten RSolr a bit too
|
94
|
+
|
95
|
+
0.6.1 - January 13, 2009
|
96
|
+
Removed SearchExt and mapping until this library gets some real use
|
97
|
+
The only param mapping now is for :page and :per_page via the #search method
|
98
|
+
The Connection::Base #query method does NO mapping now
|
99
|
+
|
100
|
+
0.6.0 - January 9, 2009
|
101
|
+
Removed first argument from RSolr.connect, the "adapter_name"
|
102
|
+
The adapter is now set using the :adapter key when passing in options to RSolr.connect:
|
103
|
+
s = RSolr.connect(:adapter=>:direct)
|
104
|
+
|
105
|
+
0.5.9 - January 7, 2009
|
106
|
+
Finally brought in the ExtLib Mash classes for incoming params and response hashes from solr
|
107
|
+
- this gives the ability to access/set values for hashes using strings OR symbols (HashWithIndifferentAccess)
|
108
|
+
Organized response tests
|
109
|
+
Added more response tests
|
110
|
+
Simplified the RSolr::Response::Base class by supporting only raw/string ruby input
|
111
|
+
Added method to Response::IndexInfo for grabbing a Solr field list
|
112
|
+
|
113
|
+
0.5.7 - January 5, 2009
|
114
|
+
Changed name from Solr to RSolr, changed all references to Solr to RSolr
|
115
|
+
Added new tests for RSolr::Mapper and RSolr::Message
|
116
|
+
|
117
|
+
0.5.6 - December 30, 2008
|
118
|
+
solr.gemspec cleanedup thanks to shairontoledo on github! :)
|
119
|
+
Added Solr::Response::Query::Facet module with helpers from the delsolr project
|
120
|
+
Also added test stub in test/connection/search_ext_test_methods.rb
|
121
|
+
Fixed pagination math errors
|
122
|
+
Added new SearchExt helper field: :phrase_filters
|
123
|
+
This will add quoted values to the :filters (fq solr param) hash for doing easier facet requests
|
124
|
+
|
125
|
+
Be sure to check out the new demo app: http://github.com/mwmitchell/consuminator/tree/master
|
126
|
+
|
127
|
+
0.5.5 - December 29, 2008
|
128
|
+
Fixed bug where accessing a field by method name failed:
|
129
|
+
docs.each do |doc|
|
130
|
+
doc.timestamp
|
131
|
+
end
|
132
|
+
Fixed bug where using the #has? method on a doc failed:
|
133
|
+
docs.each do |doc|
|
134
|
+
doc.has?('timestamp')
|
135
|
+
end
|
136
|
+
Removed invalid autoload in Solr module
|
137
|
+
Fixed spelling error in Solr::Connection::SearchExt (thanks to matthewrudy)
|
138
|
+
|
139
|
+
0.5.4 - December 29, 2008
|
140
|
+
Re-organized the main Solr adapters, they're now in Solr::Connection::Adapter instead of Solr::Adapter
|
141
|
+
All responses from HTTPClient and Connection::Adapter::Direct return a hash with the following keys:
|
142
|
+
:status_code
|
143
|
+
:body
|
144
|
+
:params
|
145
|
+
:url
|
146
|
+
:path
|
147
|
+
:headers
|
148
|
+
:data
|
149
|
+
This hash is now available in the solr response objects as #source - this will be useful in testing and debugging by allowing you to see the generated params and queries... example:
|
150
|
+
response = Solr.query(:q=>'*:*')
|
151
|
+
response.source[:params]
|
152
|
+
response.source[:body]
|
153
|
+
response.source[:url]
|
154
|
+
Added MultiValue field support in Solr::Message, thanks to Fouad Mardini
|
155
|
+
Bug in Solr::Connection::SearchExt where the :q params was not getting generated - fixed by Fouad Mardini
|
156
|
+
Organized tests a bit, moved connection tests into test/connection
|
157
|
+
Fixed a bug in Solr::Connection::Adapter::HTTP where invalid HTTP POST headers were being generated
|
data/LICENSE
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
Copyright 2008-2009 Matt Mitchell
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
14
|
+
|
15
|
+
========================================================================
|
16
|
+
|
17
|
+
For use of the lib/Mash/extlib code:
|
18
|
+
|
19
|
+
========================================================================
|
20
|
+
|
21
|
+
Copyright (c) 2008 Sam Smoot.
|
22
|
+
|
23
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
24
|
+
a copy of this software and associated documentation files (the
|
25
|
+
"Software"), to deal in the Software without restriction, including
|
26
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
27
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
28
|
+
permit persons to whom the Software is furnished to do so, subject to
|
29
|
+
the following conditions:
|
30
|
+
|
31
|
+
The above copyright notice and this permission notice shall be
|
32
|
+
included in all copies or substantial portions of the Software.
|
33
|
+
|
34
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
35
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
36
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
37
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
38
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
39
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
40
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
41
|
+
|
42
|
+
---
|
43
|
+
---
|
44
|
+
|
45
|
+
Some portions of blank.rb and mash.rb are verbatim copies of software
|
46
|
+
licensed under the MIT license. That license is included below:
|
47
|
+
|
48
|
+
Copyright (c) 2005-2008 David Heinemeier Hansson
|
49
|
+
|
50
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
51
|
+
a copy of this software and associated documentation files (the
|
52
|
+
"Software"), to deal in the Software without restriction, including
|
53
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
54
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
55
|
+
permit persons to whom the Software is furnished to do so, subject to
|
56
|
+
the following conditions:
|
57
|
+
|
58
|
+
The above copyright notice and this permission notice shall be
|
59
|
+
included in all copies or substantial portions of the Software.
|
60
|
+
|
61
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
62
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
63
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
64
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
65
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
66
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
67
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
=RSolr
|
2
|
+
|
3
|
+
A Ruby client for Apache Solr. Has transparent JRuby support by using "org.apache.solr.servlet.DirectSolrConnection" as a connection adapter.
|
4
|
+
|
5
|
+
==Installation:
|
6
|
+
gem sources -a http://gems.github.com
|
7
|
+
sudo gem install mwmitchell-rsolr
|
8
|
+
|
9
|
+
==Community
|
10
|
+
http://groups.google.com/group/rsolr
|
11
|
+
|
12
|
+
==Simple usage:
|
13
|
+
require 'rubygems'
|
14
|
+
require 'rsolr'
|
15
|
+
rsolr = RSolr.connect
|
16
|
+
response = rsolr.select(:q=>'*:*') # sends a request to /solr/select?q=*:*
|
17
|
+
|
18
|
+
# can also set the request handler path like:
|
19
|
+
response = rsolr.send_request('/catalog', :q=>'*:*') # sends a request to /solr/catalog?q=*:*
|
20
|
+
|
21
|
+
To run tests:
|
22
|
+
|
23
|
+
Copy an Apache Solr 1.3.0/or later (http://apache.seekmeup.com/lucene/solr/1.3.0/) distribution into this directory and rename to "apache-solr"
|
24
|
+
Start Solr HTTP: rake rsolr:start_test_server
|
25
|
+
MRI Ruby: rake
|
26
|
+
JRuby: jruby -S rake
|
27
|
+
|
28
|
+
To get a connection in MRI/standard Ruby:
|
29
|
+
|
30
|
+
solr = RSolr.connect
|
31
|
+
|
32
|
+
To change the Solr HTTP host:
|
33
|
+
|
34
|
+
solr = RSolr.connect(:url=>'http://solrserver.com')
|
35
|
+
|
36
|
+
To get a direct connection (no http) in jRuby using DirectSolrConnection:
|
37
|
+
|
38
|
+
solr = RSolr.connect({
|
39
|
+
:adapter=>:direct,
|
40
|
+
:home_dir=>'/path/to/solr/home',
|
41
|
+
:dist_dir=>'/path/to/solr/distribution'
|
42
|
+
)
|
43
|
+
|
44
|
+
== Requests
|
45
|
+
Once you have a connection, you can execute queries, updates etc..
|
46
|
+
|
47
|
+
=== Querying
|
48
|
+
Use the #select method to send requests to the /select handler:
|
49
|
+
response = solr.select(:q=>'washington', :facet=>true, 'facet.limit'=>-1, 'facet.field'=>'cat', 'facet.field'=>'inStock', :start=>0, :rows=>10)
|
50
|
+
|
51
|
+
|
52
|
+
=== Updating Solr
|
53
|
+
Updating is done using native Ruby structures. Hashes are used for single documents and arrays are used for a collection of documents (hashes). These structures get turned into simple XML "messages".
|
54
|
+
|
55
|
+
Single document
|
56
|
+
response = solr.add(:id=>1, :price=>1.00)
|
57
|
+
|
58
|
+
Multiple documents
|
59
|
+
documents = [{:id=>1, :price=>1.00}, {:id=>2, :price=>10.50}]
|
60
|
+
response = solr.add(documents)
|
61
|
+
|
62
|
+
When adding, you can also supply "add" xml element attributes and/or a block for manipulating other "add" related elements:
|
63
|
+
|
64
|
+
doc = {:id=>1, :price=>1.00}
|
65
|
+
add_attributes = {:allowDups=>false, :commitWithin=>10.0}
|
66
|
+
solr.add(doc, add_attributes) do |doc|
|
67
|
+
# boost each document
|
68
|
+
doc.attrs[:boost] = 1.5
|
69
|
+
# boost the price field:
|
70
|
+
doc.field_by_name(:price).attrs[:boost] = 2.0
|
71
|
+
end
|
72
|
+
|
73
|
+
Delete by id
|
74
|
+
response = solr.delete_by_id(1)
|
75
|
+
or an array of ids
|
76
|
+
response = solr.delete_by_id([1, 2, 3, 4])
|
77
|
+
|
78
|
+
Delete by query:
|
79
|
+
response = solr.delete_by_query('price:1.00')
|
80
|
+
Delete by array of queries
|
81
|
+
response = solr.delete_by_query(['price:1.00', 'price:10.00'])
|
82
|
+
|
83
|
+
|
84
|
+
Commit & Optimize
|
85
|
+
solr.commit
|
86
|
+
solr.optimize
|
87
|
+
|
88
|
+
|
89
|
+
== Response Formats
|
90
|
+
The default response format is Ruby. When the :wt param is set to :ruby, the response is eval'd and wrapped up in a nice Mash (Hash) class. You can get a raw response by setting the :wt to "ruby" - notice, the string -- not a symbol. All other response formats are available as expected, :wt=>'xml' etc..
|
91
|
+
|
92
|
+
===XML:
|
93
|
+
solr.select(:wt=>:xml)
|
94
|
+
===JSON:
|
95
|
+
solr.select(:wt=>:json)
|
96
|
+
===Raw Ruby
|
97
|
+
solr.select(:wt=>'ruby')
|
98
|
+
|
99
|
+
You can access the original request context (path, params, url etc.) by using a block:
|
100
|
+
solr.select(:q=>'*:*') do |solr_response, adapter_response|
|
101
|
+
adapter_response[:status_code]
|
102
|
+
adapter_response[:body]
|
103
|
+
adapter_response[:url]
|
104
|
+
end
|
105
|
+
|
106
|
+
The adapter_response is a hash that contains the generated params, url, path, post data, headers etc., very useful for debugging and testing.
|
107
|
+
|
108
|
+
|
109
|
+
== HTTP Client Adapter
|
110
|
+
You can specify the http client adapter to use by setting solr.adapter.connector.adapter_name to one of:
|
111
|
+
:net_http uses the standard Net::HTTP library
|
112
|
+
:curb uses the Ruby "curl" bindings
|
113
|
+
|
114
|
+
Example:
|
115
|
+
|
116
|
+
solr.adapter.connector.adapter_name = :curb
|
117
|
+
|
118
|
+
Example of using the HTTP client only:
|
119
|
+
|
120
|
+
hclient = RSolr::HTTPClient::Connector.new(:curb).connect(url)
|
121
|
+
hclient = RSolr::HTTPClient::Connector.new(:net_http).connect(url)
|
122
|
+
hclient.get('/')
|
123
|
+
|
124
|
+
After reading this http://apocryph.org/2008/11/09/more_indepth_analysis_ruby_http_client_performance - I would recommend using the :curb adapter. NOTE: You can't use the :curb adapter under jRuby. To install curb:
|
125
|
+
|
126
|
+
sudo gem install curb
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
namespace :rsolr do
|
6
|
+
|
7
|
+
desc "Starts the HTTP server used for running HTTP connection tests"
|
8
|
+
task :start_test_server do
|
9
|
+
system "cd apache-solr/example; java -jar start.jar"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
task :default => [:test_units]
|
15
|
+
|
16
|
+
desc "Run basic tests"
|
17
|
+
Rake::TestTask.new("test_units") { |t|
|
18
|
+
t.pattern = 'test/**/*_test.rb'
|
19
|
+
t.verbose = true
|
20
|
+
t.warning = true
|
21
|
+
t.libs << "test"
|
22
|
+
}
|
23
|
+
|
24
|
+
# Clean house
|
25
|
+
desc 'Clean up tmp files.'
|
26
|
+
task :clean do |t|
|
27
|
+
FileUtils.rm_rf "doc"
|
28
|
+
FileUtils.rm_rf "pkg"
|
29
|
+
end
|
30
|
+
|
31
|
+
# Rdoc
|
32
|
+
desc 'Generate documentation for the rsolr gem.'
|
33
|
+
Rake::RDocTask.new(:doc) do |rdoc|
|
34
|
+
rdoc.rdoc_dir = 'doc'
|
35
|
+
rdoc.title = 'Solr-Ruby'
|
36
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
37
|
+
rdoc.rdoc_files.include('README.rdoc')
|
38
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
39
|
+
end
|
data/examples/direct.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Must be executed using jruby
|
2
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'rsolr')
|
3
|
+
|
4
|
+
base = File.expand_path( File.dirname(__FILE__) )
|
5
|
+
dist = File.join(base, '..', 'apache-solr')
|
6
|
+
home = File.join(dist, 'example', 'solr')
|
7
|
+
|
8
|
+
solr = RSolr.connect(:adapter=>:direct, :home_dir=>home, :dist_dir=>dist)
|
9
|
+
|
10
|
+
Dir['../apache-solr/example/exampledocs/*.xml'].each do |xml_file|
|
11
|
+
puts "Updating with #{xml_file}"
|
12
|
+
solr.update File.read(xml_file)
|
13
|
+
end
|
14
|
+
|
15
|
+
puts
|
16
|
+
|
17
|
+
response = solr.select :q=>'ipod', :fq=>'price:[0 TO 50]', :rows=>2, :start=>0
|
18
|
+
|
19
|
+
docs = response[:response][:docs]
|
20
|
+
|
21
|
+
docs.each do |doc|
|
22
|
+
puts doc[:timestamp]
|
23
|
+
end
|
24
|
+
|
25
|
+
solr.delete_by_query('*:*') and solr.commit
|
26
|
+
|
27
|
+
solr.adapter.close
|
data/examples/http.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'rsolr')
|
2
|
+
|
3
|
+
solr = RSolr.connect
|
4
|
+
|
5
|
+
# switch out the http adapter from curb to net_http (just for an example)
|
6
|
+
solr.adapter.connector.adapter_name = :curb
|
7
|
+
|
8
|
+
Dir['../apache-solr/example/exampledocs/*.xml'].each do |xml_file|
|
9
|
+
puts "Updating with #{xml_file}"
|
10
|
+
solr.update File.read(xml_file)
|
11
|
+
end
|
12
|
+
|
13
|
+
puts
|
14
|
+
|
15
|
+
solr.select(:q=>'ipod', :fq=>'price:[0 TO 50]', :rows=>2, :start=>0) do |solr_response,adapter_response|
|
16
|
+
puts "URL : #{adapter_response[:url]}"
|
17
|
+
solr_response[:response][:docs].each do |doc|
|
18
|
+
puts doc[:timestamp]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
solr.delete_by_query('*:*') and solr.commit
|
data/lib/core_ext.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#class Symbol
|
2
|
+
|
3
|
+
# allow symbol chaining: :one.two.three
|
4
|
+
# This breaks Rails, probably lots of other things too :(
|
5
|
+
#def method_missing(m)
|
6
|
+
# [self.to_s, m.to_s].join('.').to_sym
|
7
|
+
#end
|
8
|
+
|
9
|
+
#end
|
10
|
+
|
11
|
+
class Hash
|
12
|
+
|
13
|
+
def to_mash
|
14
|
+
self.is_a?(Mash) ? self : Mash.new(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
unless Array.respond_to?(:extract_options!)
|
20
|
+
class Array
|
21
|
+
def extract_options!
|
22
|
+
last.is_a?(::Hash) ? pop : {}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|