Author: ehatcher
Date: Wed Aug 22 08:22:06 2007
New Revision: 568654
URL: http://svn.apache.org/viewvc?rev=568654&view=rev
Log:
Fix modify document implementation to support multivalued fields
Modified:
lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb
Modified:
lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb?rev=568654&r1=568653&r2=568654&view=diff
==============================================================================
--- lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
(original)
+++ lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
Wed Aug 22 08:22:06 2007
@@ -20,37 +20,27 @@
# Example: ModifyDocument.new(:id => 10, :overwrite => {:field_name => "new
value"})
def initialize(update_data)
modes = []
- @fields = {}
+ @doc = {}
[:overwrite, :append, :distinct, :increment].each do |mode|
field_data = update_data[mode]
if field_data
field_data.each do |field_name, field_value|
modes << "#{field_name}:#{mode.to_s.upcase}"
- @fields[field_name] = field_value
+ @doc[field_name] = field_value
end
update_data.delete mode
end
end
@mode = modes.join(",")
- @id = update_data # should only be one key remaining
+
+ # only one key should be left over, the id
+ @doc[update_data.keys[0].to_s] = update_data.values[0]
end
# returns the request as a string suitable for posting
def to_s
e = Solr::XML::Element.new 'add'
- doc = Solr::XML::Element.new 'doc'
- e.add_element doc
- f = Solr::XML::Element.new 'field'
- f.attributes['name'] = @id.keys[0].to_s
- f.text = @id.values[0]
- doc.add_element f
- @fields.each do |key, value|
- f = Solr::XML::Element.new 'field'
- f.attributes['name'] = key.to_s
- # TODO - what about boost? - can it be updated too?
- f.text = value
- doc.add_element f
- end
+ e.add_element(Solr::Document.new(@doc).to_xml)
return e.to_s
end
Modified:
lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb?rev=568654&r1=568653&r2=568654&view=diff
==============================================================================
--- lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb
(original)
+++ lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb
Wed Aug 22 08:22:06 2007
@@ -16,10 +16,10 @@
class ModifyDocumentTest < Test::Unit::TestCase
def test_update_formatting
- request = Solr::Request::ModifyDocument.new(:id => 10, :overwrite =>
{:name => :value})
+ request = Solr::Request::ModifyDocument.new(:id => 10, :overwrite =>
{:name => ['val1', 'val2']})
assert_equal :xml, request.response_format
assert_equal 'update?mode=name:OVERWRITE', request.handler
- assert_match(/<add>[\s]*<doc>[\s]*<field
name=["']id['"]>10<\/field>[\s]*<field
name=['"]name['"]>value<\/field>[\s]*<\/doc>[\s]*<\/add>/, request.to_s)
+ assert_match(/<add>[\s]*<doc>[\s]*<field
name=["']id['"]>10<\/field>[\s]*<field
name=['"]name['"]>val1<\/field>[\s]*<field
name=['"]name['"]>val2<\/field>[\s]*<\/doc>[\s]*<\/add>/, request.to_s)
end
end