mwmitchell-rsolr 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES.txt +5 -0
- data/lib/rsolr/connection/adapter/http.rb +1 -1
- data/lib/rsolr/connection/base.rb +2 -2
- data/lib/rsolr/connection/param_mapping/dismax.rb +2 -2
- data/lib/rsolr/connection/param_mapping/standard.rb +18 -6
- data/lib/rsolr/http_client.rb +5 -1
- data/lib/rsolr.rb +2 -1
- data/test/connection/param_mapping_test.rb +5 -5
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
0.6.4 - January 26, 2009
|
2
|
+
Updated the mapping output for the :filters and :phrase_filters (when using the #search method)
|
3
|
+
- now sending multiple fq's instead of one
|
4
|
+
Updated mapping tests
|
5
|
+
|
1
6
|
0.6.3 - January 21, 2009
|
2
7
|
Added a new param mapping module: RSolr::Connection::ParamMapping
|
3
8
|
Mapping only for fields that need conversion/escaping or nested (facet.*) etc.
|
@@ -21,7 +21,7 @@ class RSolr::Connection::Adapter::HTTP
|
|
21
21
|
#
|
22
22
|
def initialize(opts={}, &block)
|
23
23
|
opts[:url]||='http://127.0.0.1:8983/solr'
|
24
|
-
@opts = default_options.merge(opts) # default_options are coming from RSolr::Connection::Adapter::CommonMethods
|
24
|
+
@opts = default_options.merge(opts).to_mash # default_options are coming from RSolr::Connection::Adapter::CommonMethods
|
25
25
|
end
|
26
26
|
|
27
27
|
def connection
|
@@ -11,7 +11,7 @@ class RSolr::Connection::Base
|
|
11
11
|
# RSolr::Adapter::HTTP
|
12
12
|
# RSolr::Adapter::Direct (jRuby only)
|
13
13
|
def initialize(adapter, opts={})
|
14
|
-
@adapter=adapter
|
14
|
+
@adapter = adapter
|
15
15
|
@param_mappers = {
|
16
16
|
:standard=>RSolr::Connection::ParamMapping::Standard,
|
17
17
|
:dismax=>RSolr::Connection::ParamMapping::Dismax
|
@@ -45,7 +45,7 @@ class RSolr::Connection::Base
|
|
45
45
|
p[:wt]==:ruby ? RSolr::Response::Query::Base.new(response) : response
|
46
46
|
end
|
47
47
|
|
48
|
-
# register your own mapper?
|
48
|
+
# register your own mapper if you want?
|
49
49
|
def search(params,&blk)
|
50
50
|
qt = params[:qt] ? params[:qt].to_sym : :dismax
|
51
51
|
mapper_class = @param_mappers[qt]
|
@@ -4,7 +4,7 @@ class RSolr::Connection::ParamMapping::Dismax < RSolr::Connection::ParamMapping:
|
|
4
4
|
super
|
5
5
|
|
6
6
|
mapping_for :alternate_query, :q.alt do |val|
|
7
|
-
format_query(val)
|
7
|
+
format_query(val).join(' ')
|
8
8
|
end
|
9
9
|
|
10
10
|
mapping_for :query_fields, :qf do |val|
|
@@ -16,7 +16,7 @@ class RSolr::Connection::ParamMapping::Dismax < RSolr::Connection::ParamMapping:
|
|
16
16
|
end
|
17
17
|
|
18
18
|
mapping_for :boost_query, :bq do |val|
|
19
|
-
format_query(val)
|
19
|
+
format_query(val).join(' ')
|
20
20
|
end
|
21
21
|
|
22
22
|
end
|
@@ -28,7 +28,11 @@ class RSolr::Connection::ParamMapping::Standard
|
|
28
28
|
end
|
29
29
|
|
30
30
|
mapping_for :phrase_queries, :q do |val|
|
31
|
-
[@output[:q], format_query(val, true)]
|
31
|
+
values = [@output[:q], format_query(val, true)]
|
32
|
+
# remove blank items
|
33
|
+
values.reject!{|v|v.to_s.empty?}
|
34
|
+
# join all items on a space
|
35
|
+
values.join(' ')
|
32
36
|
end
|
33
37
|
|
34
38
|
mapping_for :filters, :fq do |val|
|
@@ -37,7 +41,14 @@ class RSolr::Connection::ParamMapping::Standard
|
|
37
41
|
|
38
42
|
# this must come after the :filter/:fq mapper
|
39
43
|
mapping_for :phrase_filters, :fq do |val|
|
40
|
-
|
44
|
+
# use the previously set fq queries and generate the new phrased based ones
|
45
|
+
values = [@output[:fq], format_query(val, true)]
|
46
|
+
# flatten (need to do this because the previous fq could have been an array)
|
47
|
+
values = values.flatten
|
48
|
+
# remove blank items
|
49
|
+
values.reject!{|v|v.to_s.empty?} # don't join -- instead create multiple fq params
|
50
|
+
# don't join... fq needs to be an array so multiple fq params are sent to solr
|
51
|
+
values
|
41
52
|
end
|
42
53
|
|
43
54
|
mapping_for :facets do |input|
|
@@ -72,6 +83,7 @@ class RSolr::Connection::ParamMapping::Standard
|
|
72
83
|
end
|
73
84
|
end
|
74
85
|
|
86
|
+
# takes an input and returns a formatted value
|
75
87
|
def format_query(input, quote=false)
|
76
88
|
case input
|
77
89
|
when Array
|
@@ -86,7 +98,7 @@ class RSolr::Connection::ParamMapping::Standard
|
|
86
98
|
def format_array_query(input, quote)
|
87
99
|
input.collect do |v|
|
88
100
|
v.is_a?(Hash) ? format_hash_query(v, quote) : prep_value(v, quote)
|
89
|
-
end
|
101
|
+
end
|
90
102
|
end
|
91
103
|
|
92
104
|
# groups values to a single field: title:(value1 value2) instead of title:value1 title:value2
|
@@ -101,11 +113,11 @@ class RSolr::Connection::ParamMapping::Standard
|
|
101
113
|
vv.is_a?(Range) ? "[#{vv.min} TO #{vv.max}]" : prep_value(vv, quote)
|
102
114
|
end
|
103
115
|
field = field.to_s.empty? ? '' : "#{field}:"
|
104
|
-
|
105
|
-
q <<
|
116
|
+
fielded_queries.each do |fq|
|
117
|
+
q << "#{field}(#{fq})"
|
106
118
|
end
|
107
119
|
end
|
108
|
-
q
|
120
|
+
q
|
109
121
|
end
|
110
122
|
|
111
123
|
def prep_value(val, quote=false)
|
data/lib/rsolr/http_client.rb
CHANGED
@@ -33,7 +33,11 @@ module RSolr::HTTPClient
|
|
33
33
|
else
|
34
34
|
raise UnkownAdapterError.new("Name: #{adapter_name}")
|
35
35
|
end
|
36
|
-
|
36
|
+
begin
|
37
|
+
Base.new RSolr::HTTPClient::Adapter.const_get(klass).new(url)
|
38
|
+
rescue URI::InvalidURIError
|
39
|
+
raise "#{$!} == #{url}"
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
class Base
|
data/lib/rsolr.rb
CHANGED
@@ -7,7 +7,7 @@ proc {|base, files|
|
|
7
7
|
|
8
8
|
module RSolr
|
9
9
|
|
10
|
-
VERSION = '0.6.
|
10
|
+
VERSION = '0.6.4'
|
11
11
|
|
12
12
|
autoload :Message, 'rsolr/message'
|
13
13
|
autoload :Response, 'rsolr/response'
|
@@ -20,6 +20,7 @@ module RSolr
|
|
20
20
|
# opts are sent to the adapter instance (:url for http, :dist_dir for :direct etc.)
|
21
21
|
# and to the connection instance
|
22
22
|
def self.connect(opts={})
|
23
|
+
opts = opts.to_mash
|
23
24
|
adapter_name = opts[:adapter] ||= :http
|
24
25
|
types = {
|
25
26
|
:http=>'HTTP',
|
@@ -20,7 +20,7 @@ class ParamMappingTest < RSolrBaseTest
|
|
20
20
|
output = mapper.map
|
21
21
|
|
22
22
|
assert_equal "a query \"a phrase query\"", output[:q]
|
23
|
-
assert_equal "a filter \"a phrase filter\"", output[:fq]
|
23
|
+
assert_equal ["a filter", "\"a phrase filter\""], output[:fq]
|
24
24
|
assert_equal 0, output[:start]
|
25
25
|
assert_equal 10, output[:rows]
|
26
26
|
# facet.field can be specified multiple times, so we need an array
|
@@ -38,8 +38,8 @@ class ParamMappingTest < RSolrBaseTest
|
|
38
38
|
mapper = Standard.new(input)
|
39
39
|
output = mapper.map
|
40
40
|
|
41
|
-
assert_equal "a query field:value blah \"a phrase\" phrase_field
|
42
|
-
assert_equal "a filter filter:field blah can_also_be_a
|
41
|
+
assert_equal "a query field:(value) blah \"a phrase\" phrase_field:(\"phrase value\")", output[:q]
|
42
|
+
assert_equal ["a filter", "filter:(field)", "blah", "can_also_be_a:(\"hash\")"], output[:fq]
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_dismax
|
@@ -51,11 +51,11 @@ class ParamMappingTest < RSolrBaseTest
|
|
51
51
|
}
|
52
52
|
mapper = Dismax.new(input)
|
53
53
|
output = mapper.map
|
54
|
-
assert_equal 'can_be_a_string_hash_or_array:OK', output[:q.alt]
|
54
|
+
assert_equal 'can_be_a_string_hash_or_array:(OK)', output[:q.alt]
|
55
55
|
assert output[:qf]=~/another_field_to_boost\^200/
|
56
56
|
assert output[:qf]=~/a_field_to_boost\^20/
|
57
57
|
assert_equal 'phrase_field^20', output[:pf]
|
58
|
-
assert_equal 'field_to_use_for_boost_query:a test', output[:bq]
|
58
|
+
assert_equal 'field_to_use_for_boost_query:(a) test', output[:bq]
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mwmitchell-rsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-26 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|