Commit aea0c47fba27d4216183eccb4eceef3c01110da9
1 parent
dad628a9
Exists in
master
and in
28 other branches
Grab fixes to acts_as_solr_reloaded (multivalue problems)
Showing
7 changed files
with
56 additions
and
132 deletions
Show diff stats
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/common_methods.rb
... | ... | @@ -28,22 +28,6 @@ module ActsAsSolr #:nodoc: |
28 | 28 | raise "Unknown field_type class: #{field_type.class}: #{field_type}" |
29 | 29 | end |
30 | 30 | end |
31 | - | |
32 | - # Sets a default value when value being set is nil. | |
33 | - def set_value_if_nil(field_type) | |
34 | - case field_type | |
35 | - when "b", :boolean | |
36 | - return "false" | |
37 | - when "s", "t", "d", :date, :string, :text | |
38 | - return "" | |
39 | - when "f", "rf", :float, :range_float, :double, :decimal | |
40 | - return 0.00 | |
41 | - when "i", "ri", :integer, :range_integer | |
42 | - return 0 | |
43 | - else | |
44 | - return "" | |
45 | - end | |
46 | - end | |
47 | 31 | |
48 | 32 | def solr_batch_add(objects) |
49 | 33 | solr_add Array(objects).map{ |a| a.to_solr_doc } | ... | ... |
vendor/plugins/acts_as_solr_reloaded/lib/acts_as_solr/instance_methods.rb
... | ... | @@ -45,32 +45,23 @@ module ActsAsSolr #:nodoc: |
45 | 45 | |
46 | 46 | # iterate through the fields and add them to the document, |
47 | 47 | configuration[:solr_fields].each do |field_name, options| |
48 | + next if [self.class.primary_key, "type"].include?(field_name.to_s) | |
49 | + | |
48 | 50 | field_boost = options[:boost] || solr_configuration[:default_boost] |
49 | 51 | field_type = get_solr_field_type(options[:type]) |
50 | 52 | solr_name = options[:as] || field_name |
51 | 53 | |
52 | 54 | value = self.send("#{field_name}_for_solr") |
53 | - value = set_value_if_nil(field_type) if value.to_s == "" | |
54 | - | |
55 | - # add the field to the document, but only if it's not the id field | |
56 | - # or the type field (from single table inheritance), since these | |
57 | - # fields have already been added above. | |
58 | - if field_name.to_s != self.class.primary_key and field_name.to_s != "type" | |
59 | - suffix = get_solr_field_type(field_type) | |
60 | - # This next line ensures that e.g. nil dates are excluded from the | |
61 | - # document, since they choke Solr. Also ignores e.g. empty strings, | |
62 | - # but these can't be searched for anyway: | |
63 | - # http://www.mail-archive.com/solr-dev@lucene.apache.org/msg05423.html | |
64 | - next if value.nil? || value.to_s.strip.empty? | |
65 | - [value].flatten.each do |v| | |
66 | - v = set_value_if_nil(suffix) if value.to_s == "" | |
67 | - | |
68 | - field = Solr::Field.new(:name => "#{solr_name}_#{suffix}", :value => ERB::Util.html_escape(v.to_s)) | |
69 | - processed_boost = validate_boost(field_boost) | |
70 | - field.boost = processed_boost if processed_boost != solr_configuration[:default_boost] | |
71 | - doc << field | |
72 | - end | |
73 | - end | |
55 | + next if value.nil? | |
56 | + | |
57 | + suffix = get_solr_field_type(field_type) | |
58 | + value = Array(value).map{ |v| ERB::Util.html_escape(v) } # escape each value | |
59 | + value = value.first if value.size == 1 | |
60 | + | |
61 | + field = Solr::Field.new(:name => "#{solr_name}_#{suffix}", :value => value) | |
62 | + processed_boost = validate_boost(field_boost) | |
63 | + field.boost = processed_boost if processed_boost != solr_configuration[:default_boost] | |
64 | + doc << field | |
74 | 65 | end |
75 | 66 | |
76 | 67 | add_dynamic_attributes(doc) | ... | ... |
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/dismax.rb
vendor/plugins/acts_as_solr_reloaded/lib/solr/request/standard.rb
... | ... | @@ -17,7 +17,7 @@ class Solr::Request::Standard < Solr::Request::Select |
17 | 17 | :radius, :latitude, :longitude, :spellcheck] |
18 | 18 | |
19 | 19 | def initialize(params) |
20 | - super('search') | |
20 | + super 'search' | |
21 | 21 | |
22 | 22 | raise "Invalid parameters: #{(params.keys - VALID_PARAMS).join(',')}" unless |
23 | 23 | (params.keys - VALID_PARAMS).empty? | ... | ... |
vendor/plugins/acts_as_solr_reloaded/solr/solr/conf/schema.xml
... | ... | @@ -53,45 +53,45 @@ |
53 | 53 | <tokenizer class="solr.StandardTokenizerFactory"/> |
54 | 54 | <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> |
55 | 55 | |
56 | - <filter class="solr.ASCIIFoldingFilterFactory"/> | |
56 | + <filter class="solr.ASCIIFoldingFilterFactory"/> | |
57 | 57 | <filter class="solr.LowerCaseFilterFactory"/> |
58 | 58 | |
59 | - <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | |
59 | + <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | |
60 | 60 | |
61 | - <!-- stemming | |
62 | - --> | |
63 | - <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.pt.txt" /> | |
64 | - <filter class="solr.PortugueseStemFilterFactory" /> | |
65 | - <!-- too slow | |
66 | - <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | |
67 | - <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | |
68 | - --> | |
61 | + <!-- stemming | |
62 | + --> | |
63 | + <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.pt.txt" /> | |
64 | + <filter class="solr.PortugueseStemFilterFactory" /> | |
65 | + <!-- too slow | |
66 | + <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | |
67 | + <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | |
68 | + --> | |
69 | 69 | |
70 | - <!-- improvised stemming | |
71 | - <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | |
72 | - --> | |
70 | + <!-- improvised stemming | |
71 | + <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | |
72 | + --> | |
73 | 73 | </analyzer> |
74 | 74 | <analyzer type="query"> |
75 | 75 | <tokenizer class="solr.StandardTokenizerFactory"/> |
76 | 76 | <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> |
77 | 77 | |
78 | - <filter class="solr.ASCIIFoldingFilterFactory"/> | |
78 | + <filter class="solr.ASCIIFoldingFilterFactory"/> | |
79 | 79 | <filter class="solr.LowerCaseFilterFactory"/> |
80 | 80 | |
81 | - <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | |
81 | + <filter class="solr.StopFilterFactory" words="stopwords.pt.txt" /> | |
82 | 82 | |
83 | - <!-- stemming | |
84 | - --> | |
85 | - <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.pt.txt" /> | |
86 | - <filter class="solr.PortugueseStemFilterFactory" /> | |
87 | - <!-- too slow | |
88 | - <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | |
89 | - <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | |
90 | - --> | |
83 | + <!-- stemming | |
84 | + --> | |
85 | + <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.pt.txt" /> | |
86 | + <filter class="solr.PortugueseStemFilterFactory" /> | |
87 | + <!-- too slow | |
88 | + <filter class="solr.HunspellStemFilterFactory" dictionary="en_US.dic" affix="en_US.aff" ignoreCase="true" /> | |
89 | + <filter class="solr.HunspellStemFilterFactory" dictionary="pt_PT.dic" affix="pt_PT.aff" ignoreCase="true" /> | |
90 | + --> | |
91 | 91 | |
92 | - <!-- improvised stemming | |
93 | - <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | |
94 | - --> | |
92 | + <!-- improvised stemming | |
93 | + <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> | |
94 | + --> | |
95 | 95 | </analyzer> |
96 | 96 | </fieldType> |
97 | 97 | |
... | ... | @@ -127,26 +127,24 @@ |
127 | 127 | <field name="latlng_0_coordinate" type="sdouble" indexed="true" stored="true" multiValued="false"/> |
128 | 128 | <field name="latlng_1_coordinate" type="sdouble" indexed="true" stored="true" multiValued="false"/> |
129 | 129 | |
130 | - <field name="id" type="string" indexed="true" stored="true" required="true" /> | |
131 | - <field name="type_s" type="string" indexed="true" stored="false" /> | |
132 | - <field name="pk_i" type="integer" indexed="true" stored="true"/> | |
133 | - <field name="pk_s" type="string" indexed="true" stored="true"/> | |
134 | - <field name="text" type="text" indexed="true" stored="false" multiValued="true"/> | |
130 | + <field name="id" type="string" indexed="true" stored="true" required="true" /> | |
131 | + <field name="pk_i" type="integer" indexed="true" stored="true"/> | |
132 | + <field name="pk_s" type="string" indexed="true" stored="true"/> | |
133 | + <field name="text" type="text" indexed="true" stored="false" multiValued="true"/> | |
135 | 134 | <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> |
136 | 135 | |
137 | - <dynamicField name="*_i" type="integer" indexed="true" stored="false"/> | |
138 | - <dynamicField name="*_t" type="text" indexed="true" stored="true"/> | |
139 | - <dynamicField name="*_f" type="float" indexed="true" stored="false" multiValued="false"/> | |
140 | - <dynamicField name="*_do" type="double" indexed="true" stored="false" multiValued="false"/> | |
141 | - <dynamicField name="*_b" type="boolean" indexed="true" stored="false"/> | |
142 | - <dynamicField name="*_d" type="date" indexed="true" stored="false" multiValued="false"/> | |
143 | - <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="false"/> | |
144 | - <dynamicField name="*_ri" type="sint" indexed="true" stored="false"/> | |
145 | - <dynamicField name="*_rf" type="sfloat" indexed="true" stored="false"/> | |
146 | - <dynamicField name="*_facet" type="string" indexed="true" stored="false"/> | |
147 | - <dynamicField name="*_s_mv" type="string" indexed="true" stored="false" multiValued="true"/> | |
136 | + <dynamicField name="*_i" type="integer" indexed="true" stored="false" multiValued="true"/> | |
137 | + <dynamicField name="*_t" type="text" indexed="true" stored="true" multiValued="true"/> | |
138 | + <dynamicField name="*_f" type="float" indexed="true" stored="false" multiValued="false"/> | |
139 | + <dynamicField name="*_do" type="double" indexed="true" stored="false" multiValued="false"/> | |
140 | + <dynamicField name="*_b" type="boolean" indexed="true" stored="false" multiValued="true"/> | |
141 | + <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="false"/> | |
142 | + <dynamicField name="*_ri" type="sint" indexed="true" stored="false" multiValued="true"/> | |
143 | + <dynamicField name="*_rf" type="sfloat" indexed="true" stored="false" multiValued="true"/> | |
144 | + <dynamicField name="*_facet" type="string" indexed="true" stored="false" multiValued="true"/> | |
145 | + <dynamicField name="*_s_mv" type="string" indexed="true" stored="false" multiValued="true"/> | |
148 | 146 | <dynamicField name="*_zh_text" type="text_zh" indexed="true" stored="false" multiValued="true"/> |
149 | - <dynamicField name="*_display" type="text" indexed="false" stored="true" multiValued="true"/> | |
147 | + <dynamicField name="*_display" type="text" indexed="false" stored="true" multiValued="true"/> | |
150 | 148 | |
151 | 149 | <field name="lat" type="sdouble" indexed="true" stored="true"/><!-- must match the latField in solrconfig.xml --> |
152 | 150 | <field name="lng" type="sdouble" indexed="true" stored="true"/><!-- must match the lngField in solrconfig.xml --> | ... | ... |
vendor/plugins/acts_as_solr_reloaded/test/unit/common_methods_shoulda.rb
... | ... | @@ -76,43 +76,6 @@ class CommonMethodsTest < Test::Unit::TestCase |
76 | 76 | end |
77 | 77 | end |
78 | 78 | |
79 | - context "when determining a default value for a field when it's nil" do | |
80 | - should "return 0.00 for a float" do | |
81 | - assert_equal 0.00, set_value_if_nil("f") | |
82 | - assert_equal 0.00, set_value_if_nil(:float) | |
83 | - assert_equal 0.00, set_value_if_nil("rf") | |
84 | - assert_equal 0.00, set_value_if_nil(:range_float) | |
85 | - end | |
86 | - | |
87 | - should "return 0 for an integer" do | |
88 | - assert_equal 0, set_value_if_nil(:integer) | |
89 | - assert_equal 0, set_value_if_nil(:range_integer) | |
90 | - assert_equal 0, set_value_if_nil("i") | |
91 | - assert_equal 0, set_value_if_nil("ri") | |
92 | - end | |
93 | - | |
94 | - should "return false for a boolean" do | |
95 | - assert_equal "false", set_value_if_nil(:boolean) | |
96 | - assert_equal "false", set_value_if_nil("b") | |
97 | - end | |
98 | - | |
99 | - should "return empty string for strings and text" do | |
100 | - assert_equal "", set_value_if_nil(:string) | |
101 | - assert_equal "", set_value_if_nil(:text) | |
102 | - assert_equal "", set_value_if_nil("t") | |
103 | - assert_equal "", set_value_if_nil("s") | |
104 | - end | |
105 | - | |
106 | - should "return an empty string for a date" do | |
107 | - assert_equal "", set_value_if_nil(:date) | |
108 | - assert_equal "", set_value_if_nil("d") | |
109 | - end | |
110 | - | |
111 | - should "return an empty string for everything else" do | |
112 | - assert_equal "", set_value_if_nil("something") | |
113 | - end | |
114 | - end | |
115 | - | |
116 | 79 | context "when determining the record id" do |
117 | 80 | context "on ActiveRecord" do |
118 | 81 | should "return the primary key value" do |
... | ... | @@ -125,4 +88,4 @@ class CommonMethodsTest < Test::Unit::TestCase |
125 | 88 | end |
126 | 89 | end |
127 | 90 | end |
128 | -end | |
129 | 91 | \ No newline at end of file |
92 | +end | ... | ... |
vendor/plugins/acts_as_solr_reloaded/test/unit/instance_methods_shoulda.rb
... | ... | @@ -225,18 +225,6 @@ class InstanceMethodsTest < Test::Unit::TestCase |
225 | 225 | assert_not_equal "bogus", doc[:id] |
226 | 226 | end |
227 | 227 | |
228 | - should "set the default value if field value is nil" do | |
229 | - @instance.name = nil | |
230 | - @instance.expects(:set_value_if_nil).with('s') | |
231 | - @instance.to_solr_doc | |
232 | - end | |
233 | - | |
234 | - should "not include nil values" do | |
235 | - @instance.name = "" | |
236 | - @instance.stubs(:set_value_if_nil).returns "" | |
237 | - assert_nil @instance.to_solr_doc[:name_s] | |
238 | - end | |
239 | - | |
240 | 228 | should "escape the contents" do |
241 | 229 | @instance.name = "<script>malicious()</script>" |
242 | 230 | assert_equal "<script>malicious()</script>", @instance.to_solr_doc[:name_s] | ... | ... |