Commit aea0c47fba27d4216183eccb4eceef3c01110da9
1 parent
dad628a9
Exists in
master
and in
29 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] | ... | ... |