Class: RSolr::Xml::Generator
Constant Summary collapse
- CONTENT_TYPE =
'text/xml'.freeze
Class Attribute Summary collapse
-
.use_nokogiri ⇒ Object
Returns the value of attribute use_nokogiri.
Class Method Summary collapse
Instance Method Summary collapse
-
#add(data, add_attrs = nil, &block) ⇒ Object
generates “add” xml for updating solr “data” can be a hash or an array of hashes.
- #build(&block) ⇒ Object
-
#commit(opts = nil) ⇒ Object
generates a <commit/> message.
- #content_type ⇒ Object
-
#delete_by_id(ids) ⇒ Object
generates a <delete><id>ID</id></delete> message “ids” can be a single value or array of values.
-
#delete_by_query(queries) ⇒ Object
generates a <delete><query>ID</query></delete> message “queries” can be a single value or an array of values.
-
#optimize(opts = nil) ⇒ Object
generates a <optimize/> message.
-
#rollback ⇒ Object
generates a <rollback/> message.
Class Attribute Details
.use_nokogiri ⇒ Object
Returns the value of attribute use_nokogiri.
7 8 9 |
# File 'lib/rsolr/xml.rb', line 7 def use_nokogiri @use_nokogiri end |
Class Method Details
.builder_proc ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/rsolr/xml.rb', line 9 def builder_proc if use_nokogiri require 'nokogiri' unless defined?(::Nokogiri::XML::Builder) :nokogiri_build else require 'builder' unless defined?(::Builder::XmlMarkup) :builder_build end end |
Instance Method Details
#add(data, add_attrs = nil, &block) ⇒ Object
generates “add” xml for updating solr “data” can be a hash or an array of hashes.
-
each hash should be a simple key=>value pair representing a solr doc.
If a value is an array, multiple fields will be created.
“add_attrs” can be a hash for setting the add xml element attributes.
This method can also accept a block. The value yielded to the block is a Message::Document; for each solr doc in “data”. You can set xml element attributes for each “doc” element or individual “field” elements.
For example:
solr.add(:nickname=>‘Tim’, :commitWithin=>1.0) do |doc_msg|
doc_msg.attrs[:boost] = 10.00 # boost the document
nickname = doc_msg.field_by_name(:nickname)
nickname.attrs[:boost] = 20 if nickname.value=='Tim' # boost a field
end
would result in an add element having the attributes boost=“10.0” and a commitWithin=“1.0”. Each doc element would have a boost=“10.0”. The “nickname” field would have a boost=“20.0” if the doc had a “nickname” field with the value of “Tim”.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/rsolr/xml.rb', line 72 def add data, add_attrs = nil, &block add_attrs ||= {} data = RSolr::Array.wrap(data) build do |xml| xml.add(add_attrs) do |add_node| data.each do |doc| doc = RSolr::Document.new(doc) if doc.respond_to?(:each_pair) yield doc if block_given? doc_node_builder = to_xml(doc) self.class.use_nokogiri ? add_node.doc_(doc.attrs,&doc_node_builder) : add_node.doc(doc.attrs,&doc_node_builder) end end end end |
#build(&block) ⇒ Object
43 44 45 |
# File 'lib/rsolr/xml.rb', line 43 def build &block self.send(self.class.builder_proc,&block) end |
#commit(opts = nil) ⇒ Object
generates a <commit/> message
88 89 90 91 |
# File 'lib/rsolr/xml.rb', line 88 def commit opts = nil opts ||= {} build {|xml| xml.commit(opts) } end |
#content_type ⇒ Object
23 24 25 |
# File 'lib/rsolr/xml.rb', line 23 def content_type CONTENT_TYPE end |
#delete_by_id(ids) ⇒ Object
generates a <delete><id>ID</id></delete> message “ids” can be a single value or array of values
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/rsolr/xml.rb', line 106 def delete_by_id ids ids = RSolr::Array.wrap(ids) build do |xml| xml.delete do |delete_node| ids.each do |id| self.class.use_nokogiri ? delete_node.id_(id) : delete_node.id(id) end end end end |
#delete_by_query(queries) ⇒ Object
generates a <delete><query>ID</query></delete> message “queries” can be a single value or an array of values
119 120 121 122 123 124 125 126 |
# File 'lib/rsolr/xml.rb', line 119 def delete_by_query(queries) queries = RSolr::Array.wrap(queries) build do |xml| xml.delete do |delete_node| queries.each { |query| delete_node.query(query) } end end end |
#optimize(opts = nil) ⇒ Object
generates a <optimize/> message
94 95 96 97 |
# File 'lib/rsolr/xml.rb', line 94 def optimize opts = nil opts ||= {} build {|xml| xml.optimize(opts) } end |
#rollback ⇒ Object
generates a <rollback/> message
100 101 102 |
# File 'lib/rsolr/xml.rb', line 100 def rollback build {|xml| xml.rollback({}) } end |