gsolr_ext 0.12.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/LICENSE ADDED
@@ -0,0 +1,13 @@
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.
data/README.rdoc ADDED
@@ -0,0 +1,126 @@
1
+ =GSolr::Ext
2
+ A set of helper methods/modules to assist in building Solr queries and handling responses when using the GSolr library.
3
+
4
+ == Installation:
5
+ gem sources -a http://gemcutter.org
6
+ sudo gem install gsolr_ext
7
+
8
+ ==Related Resources & Projects
9
+ * {GSolr}[http://github.com/mwmitchell/gsolr_ext]
10
+
11
+ ==Requests
12
+ To use the GSolr::Ext connection instead of the normal GSolr connection just require 'gsolr_ext':
13
+ require 'gsolr_ext'
14
+ solr = GSolr.connect
15
+
16
+ GSolr::Ext adds a #find and a #luke method to the connection object.
17
+
18
+ ===#luke
19
+ The #luke method returns a Hash/Mash result of a /admin/luke?numTerms=0 request:
20
+ luke_response = solr.luke
21
+ luke_response['index']
22
+ luke_response['fields']
23
+ luke_response['info']
24
+
25
+
26
+ ===#find
27
+ The #find method listens for certain keys. All other keys are ignored, allowing the ability to mix-and-match special keys with normal Solr param keys. The recognized keys are describe below.
28
+
29
+
30
+ :page - This maps to the Solr "start" param. The current "page" in the results set. GSolr::Ext handles the page-to-rows math for you.
31
+
32
+
33
+ :per_page - This maps to the Solr "rows" param. How many "pages" in the result.
34
+
35
+
36
+ :queries - This key maps to the Solr "q" param. Accepts a string, array or hash. When an array is used, each value is joined by a space. When a hash is used, the keys are used as Solr fields.
37
+
38
+ * :queries => 'normal' BECOMES ?q=normal
39
+ * :queries => ['one', 'two'] BECOMES ?q=one two
40
+ * :queries => {:title=>'one'} BECOMES ?q=title:(one)
41
+ * :queries => ['red', {:title=>'one'}] BECOMES ?q=red title:(one)
42
+
43
+
44
+ :phrases - This value is mapped to the Solr "q" param. When this key is used, the value will become double-quoted, creating a Solr "phrase" based query.
45
+
46
+ * :phrases => 'normal' BECOMES ?q="normal"
47
+ * :phrases => ['one', 'two'] BECOMES ?q="one" "two"
48
+ * :phrases => {:title=>'one'} BECOMES ?q=title:("one")
49
+ * :phrases => ['red', {:title=>'one'}] BECOMES ?q="red" title:("one")
50
+
51
+
52
+ :filters - The :filters key maps to the Solr :fq param. This has the same behavior as the :queries key, except it's for the :fq param.
53
+
54
+ * :filters => 'normal' BECOMES ?fq=normal
55
+ * :filters => ['one', 'two'] BECOMES ?fq=one two
56
+ * :filters => {:title=>'one'} BECOMES ?fq=title:(one)
57
+ * :filters => ['red', {:title=>'one'}] BECOMES ?fq=red title:(one)
58
+
59
+
60
+ :phrase_filters - The :phrase_filters key maps to the Solr :fq param. This has the same behavior as the :phrases key, except it's for the :fq param.
61
+
62
+ * :phrase_filters => 'normal' BECOMES ?fq="normal"
63
+ * :phrase_filters => ['one', 'two'] BECOMES ?fq="one" "two"
64
+ * :phrase_filters => {:title=>'one'} BECOMES ?fq=title:("one")
65
+ * :phrase_filters => ['red', {:title=>'one'}] BECOMES ?fq="red" title:("one")
66
+
67
+
68
+ :facets - The :facets does a few different things. First, it sets the Solr param facet=true. It accepts a hash with a single key called :fields. This should be an array of field names to facet on.
69
+
70
+ * :facets=>{:fields=>['cat', 'blah']} BECOMES ?facet=true&facet.field=cat&facet.field=blah
71
+
72
+
73
+
74
+ ==Request Example
75
+ require 'gsolr_ext'
76
+ solr = GSolr.connect
77
+ solr_params = {
78
+ :page=>2,
79
+ :per_page=>10,
80
+ :phrases=>{:name=>'This is a phrase'},
81
+ :filters=>['test', {:price=>(1..10)}],
82
+ :phrase_filters=>{:manu=>['Apple']},
83
+ :queries=>'ipod',
84
+ :facets=>{:fields=>['cat', 'blah']},
85
+ :echoParams => 'EXPLICIT'
86
+ }
87
+ response = gsolr_ext.find solr_params
88
+
89
+ ==Responses
90
+ GSolr::Ext decorates the normal output hash from GSolr and adds some helpful methods.
91
+
92
+ require 'gsolr_ext'
93
+ solr = GSolr.connect
94
+
95
+ response = solr.find :q=>'*:*'
96
+
97
+ response.ok?
98
+ response.params
99
+ response.docs
100
+ response.docs.previous_page
101
+ response.docs.next_page
102
+ response.facets.each do |facet|
103
+ puts facet.name
104
+ facet.items.each do |item|
105
+ puts "#{facet.name}::#{item.value} (#{item.hits})"
106
+ end
107
+ end
108
+
109
+ You can access values in the response hash using symbols or strings.
110
+
111
+ ===Documents/Pagination
112
+ If you wanna paginate, just throw the collection into the WillPaginate view helper.
113
+ <%= will_paginate response.docs %>
114
+
115
+ ==The "Model" Module
116
+ You can create your own <read-only> "models" using GSolr::Ext::Model
117
+
118
+ class Book
119
+ include GSolr::Ext::Model
120
+ def self.find_by_author(author)
121
+ find(:fq=>'object_type:"book"', :rows=>10, :phrase_filters=>{:author=>author})
122
+ end
123
+ end
124
+
125
+ all_books = Book.find('*:*')
126
+ hawk_books = Book.find_by_author('hawk')
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'bundler'
5
+ require 'rake'
6
+ require 'rake/testtask'
7
+ require 'rake/gempackagetask'
8
+
9
+ gemspec = eval File.read('gsolr_ext.gemspec')
10
+
11
+ # Gem packaging tasks
12
+ Rake::GemPackageTask.new(gemspec) do |pkg|
13
+ pkg.need_zip = false
14
+ pkg.need_tar = false
15
+ end
16
+
17
+ task :gem => :gemspec
18
+
19
+ desc %{Build the gemspec file.}
20
+ task :gemspec do
21
+ gemspec.validate
22
+ end
23
+
24
+ desc %{Release the gem to RubyGems.org}
25
+ task :release => :gem do
26
+ system "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
27
+ end
28
+
29
+ require 'rspec'
30
+ require 'rspec/core'
31
+ require 'rspec/core/rake_task'
32
+
33
+ Rspec::Core::RakeTask.new(:spec) do |spec|
34
+ spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.verbose = true
36
+ spec.rspec_opts = ['--color']
37
+ end
38
+
39
+ Rspec::Core::RakeTask.new(:rcov) do |spec|
40
+ spec.pattern = 'spec/**/*_spec.rb'
41
+ spec.verbose = true
42
+ spec.rcov = true
43
+ spec.rspec_opts = ['--color']
44
+ end
45
+
46
+ task :default => :spec
data/TODO.txt ADDED
@@ -0,0 +1 @@
1
+ default_params for Model?
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.12.1
data/gsolr_ext.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ $:.unshift(File.dirname(__FILE__)) unless
7
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
8
+
9
+ $:.push File.expand_path("../lib", __FILE__)
10
+
11
+ require 'date'
12
+ require 'gsolr_ext/version'
13
+
14
+ Gem::Specification.new do |s|
15
+ s.name = %q{gsolr_ext}
16
+ s.version = GSolr::Ext::VERSION
17
+ s.date = Date.today.to_s
18
+ s.authors = ["Scott Gonyea"] # "Matt Mitchell" authored RSolr + RSolr::Ext
19
+ s.email = %q{me@sgonyea.com}
20
+ s.homepage = %q{https://github.com/aitrus/gsolr_ext}
21
+
22
+ s.summary = %q{A query/response extension lib for GSolr}
23
+ s.description = %q{A query/response extension lib for the Generic Solr Gem (fork of RSolr)}
24
+
25
+ s.add_dependency 'gsolr'
26
+ s.add_development_dependency "rspec"
27
+
28
+ s.files = `git ls-files`.split("\n")
29
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
30
+ s.require_paths = ["lib"]
31
+ end
32
+
data/gsolr_ext.tmproj ADDED
@@ -0,0 +1,258 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>currentDocument</key>
6
+ <string>lib/gsolr_ext.rb</string>
7
+ <key>documents</key>
8
+ <array>
9
+ <dict>
10
+ <key>expanded</key>
11
+ <true/>
12
+ <key>name</key>
13
+ <string>gsolr_ext</string>
14
+ <key>regexFolderFilter</key>
15
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
+ <key>sourceDirectory</key>
17
+ <string></string>
18
+ </dict>
19
+ </array>
20
+ <key>fileHierarchyDrawerWidth</key>
21
+ <integer>200</integer>
22
+ <key>metaData</key>
23
+ <dict>
24
+ <key>Gemfile</key>
25
+ <dict>
26
+ <key>caret</key>
27
+ <dict>
28
+ <key>column</key>
29
+ <integer>13</integer>
30
+ <key>line</key>
31
+ <integer>6</integer>
32
+ </dict>
33
+ <key>firstVisibleColumn</key>
34
+ <integer>0</integer>
35
+ <key>firstVisibleLine</key>
36
+ <integer>0</integer>
37
+ </dict>
38
+ <key>Rakefile</key>
39
+ <dict>
40
+ <key>caret</key>
41
+ <dict>
42
+ <key>column</key>
43
+ <integer>0</integer>
44
+ <key>line</key>
45
+ <integer>9</integer>
46
+ </dict>
47
+ <key>firstVisibleColumn</key>
48
+ <integer>0</integer>
49
+ <key>firstVisibleLine</key>
50
+ <integer>1</integer>
51
+ </dict>
52
+ <key>gsolr_ext.gemspec</key>
53
+ <dict>
54
+ <key>caret</key>
55
+ <dict>
56
+ <key>column</key>
57
+ <integer>0</integer>
58
+ <key>line</key>
59
+ <integer>25</integer>
60
+ </dict>
61
+ <key>firstVisibleColumn</key>
62
+ <integer>0</integer>
63
+ <key>firstVisibleLine</key>
64
+ <integer>0</integer>
65
+ </dict>
66
+ <key>lib/gsolr_ext.rb</key>
67
+ <dict>
68
+ <key>caret</key>
69
+ <dict>
70
+ <key>column</key>
71
+ <integer>19</integer>
72
+ <key>line</key>
73
+ <integer>16</integer>
74
+ </dict>
75
+ <key>firstVisibleColumn</key>
76
+ <integer>0</integer>
77
+ <key>firstVisibleLine</key>
78
+ <integer>0</integer>
79
+ </dict>
80
+ <key>lib/gsolr_ext/client.rb</key>
81
+ <dict>
82
+ <key>caret</key>
83
+ <dict>
84
+ <key>column</key>
85
+ <integer>17</integer>
86
+ <key>line</key>
87
+ <integer>2</integer>
88
+ </dict>
89
+ <key>firstVisibleColumn</key>
90
+ <integer>0</integer>
91
+ <key>firstVisibleLine</key>
92
+ <integer>0</integer>
93
+ </dict>
94
+ <key>lib/gsolr_ext/doc.rb</key>
95
+ <dict>
96
+ <key>caret</key>
97
+ <dict>
98
+ <key>column</key>
99
+ <integer>0</integer>
100
+ <key>line</key>
101
+ <integer>0</integer>
102
+ </dict>
103
+ <key>firstVisibleColumn</key>
104
+ <integer>0</integer>
105
+ <key>firstVisibleLine</key>
106
+ <integer>0</integer>
107
+ </dict>
108
+ <key>lib/gsolr_ext/model.rb</key>
109
+ <dict>
110
+ <key>caret</key>
111
+ <dict>
112
+ <key>column</key>
113
+ <integer>0</integer>
114
+ <key>line</key>
115
+ <integer>99</integer>
116
+ </dict>
117
+ <key>firstVisibleColumn</key>
118
+ <integer>0</integer>
119
+ <key>firstVisibleLine</key>
120
+ <integer>70</integer>
121
+ </dict>
122
+ <key>lib/gsolr_ext/request.rb</key>
123
+ <dict>
124
+ <key>caret</key>
125
+ <dict>
126
+ <key>column</key>
127
+ <integer>0</integer>
128
+ <key>line</key>
129
+ <integer>0</integer>
130
+ </dict>
131
+ <key>firstVisibleColumn</key>
132
+ <integer>0</integer>
133
+ <key>firstVisibleLine</key>
134
+ <integer>0</integer>
135
+ </dict>
136
+ <key>lib/gsolr_ext/response.rb</key>
137
+ <dict>
138
+ <key>caret</key>
139
+ <dict>
140
+ <key>column</key>
141
+ <integer>0</integer>
142
+ <key>line</key>
143
+ <integer>38</integer>
144
+ </dict>
145
+ <key>firstVisibleColumn</key>
146
+ <integer>0</integer>
147
+ <key>firstVisibleLine</key>
148
+ <integer>0</integer>
149
+ </dict>
150
+ <key>lib/gsolr_ext/response/docs.rb</key>
151
+ <dict>
152
+ <key>caret</key>
153
+ <dict>
154
+ <key>column</key>
155
+ <integer>0</integer>
156
+ <key>line</key>
157
+ <integer>0</integer>
158
+ </dict>
159
+ <key>firstVisibleColumn</key>
160
+ <integer>0</integer>
161
+ <key>firstVisibleLine</key>
162
+ <integer>0</integer>
163
+ </dict>
164
+ <key>lib/gsolr_ext/response/facets.rb</key>
165
+ <dict>
166
+ <key>caret</key>
167
+ <dict>
168
+ <key>column</key>
169
+ <integer>0</integer>
170
+ <key>line</key>
171
+ <integer>0</integer>
172
+ </dict>
173
+ <key>firstVisibleColumn</key>
174
+ <integer>0</integer>
175
+ <key>firstVisibleLine</key>
176
+ <integer>0</integer>
177
+ </dict>
178
+ <key>lib/gsolr_ext/response/spelling.rb</key>
179
+ <dict>
180
+ <key>caret</key>
181
+ <dict>
182
+ <key>column</key>
183
+ <integer>0</integer>
184
+ <key>line</key>
185
+ <integer>0</integer>
186
+ </dict>
187
+ <key>firstVisibleColumn</key>
188
+ <integer>0</integer>
189
+ <key>firstVisibleLine</key>
190
+ <integer>0</integer>
191
+ </dict>
192
+ <key>lib/gsolr_ext/version.rb</key>
193
+ <dict>
194
+ <key>caret</key>
195
+ <dict>
196
+ <key>column</key>
197
+ <integer>0</integer>
198
+ <key>line</key>
199
+ <integer>5</integer>
200
+ </dict>
201
+ <key>firstVisibleColumn</key>
202
+ <integer>0</integer>
203
+ <key>firstVisibleLine</key>
204
+ <integer>0</integer>
205
+ </dict>
206
+ <key>lib/mash.rb</key>
207
+ <dict>
208
+ <key>caret</key>
209
+ <dict>
210
+ <key>column</key>
211
+ <integer>0</integer>
212
+ <key>line</key>
213
+ <integer>0</integer>
214
+ </dict>
215
+ <key>firstVisibleColumn</key>
216
+ <integer>0</integer>
217
+ <key>firstVisibleLine</key>
218
+ <integer>0</integer>
219
+ </dict>
220
+ <key>spec/spec_helper.rb</key>
221
+ <dict>
222
+ <key>caret</key>
223
+ <dict>
224
+ <key>column</key>
225
+ <integer>10</integer>
226
+ <key>line</key>
227
+ <integer>4</integer>
228
+ </dict>
229
+ <key>firstVisibleColumn</key>
230
+ <integer>0</integer>
231
+ <key>firstVisibleLine</key>
232
+ <integer>0</integer>
233
+ </dict>
234
+ </dict>
235
+ <key>openDocuments</key>
236
+ <array>
237
+ <string>lib/gsolr_ext/client.rb</string>
238
+ <string>lib/gsolr_ext/doc.rb</string>
239
+ <string>lib/gsolr_ext/model.rb</string>
240
+ <string>lib/gsolr_ext/request.rb</string>
241
+ <string>lib/gsolr_ext/response/docs.rb</string>
242
+ <string>lib/gsolr_ext/response/facets.rb</string>
243
+ <string>lib/gsolr_ext/response/spelling.rb</string>
244
+ <string>lib/gsolr_ext/response.rb</string>
245
+ <string>lib/gsolr_ext.rb</string>
246
+ <string>Rakefile</string>
247
+ <string>gsolr_ext.gemspec</string>
248
+ <string>Gemfile</string>
249
+ <string>lib/gsolr_ext/version.rb</string>
250
+ <string>lib/mash.rb</string>
251
+ <string>spec/spec_helper.rb</string>
252
+ </array>
253
+ <key>showFileHierarchyDrawer</key>
254
+ <true/>
255
+ <key>windowFrame</key>
256
+ <string>{{221, 173}, {944, 776}}</string>
257
+ </dict>
258
+ </plist>