Module: RSolr::Nokogiri::Generator
- Defined in:
- lib/rsolr-nokogiri.rb
Instance Method Summary collapse
-
#add(data, add_attrs = {}, &block) ⇒ Object
generates "add" xml for updating solr "data" can be a hash or an array of hashes.
- #build {|b| ... } ⇒ Object
-
#commit(opts = {}) ⇒ Object
generates a
message. -
#delete_by_id(ids) ⇒ Object
generates a
message "ids" can be a single value or array of values.ID -
#delete_by_query(queries) ⇒ Object
generates a
message "queries" can be a single value or an array of values.ID -
#optimize(opts = {}) ⇒ Object
generates a
message. -
#rollback(opts = {}) ⇒ Object
generates a
message.
Instance Method Details
#add(data, add_attrs = {}, &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 = 10.00 # boost the document nickname = doc_msg.field_by_name(:nickname) nickname.attrs = 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".
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rsolr-nokogiri.rb', line 52 def add data, add_attrs={}, &block data = [data] unless data.is_a?(Array) build do |xml| xml.add(add_attrs) do |add_node| data.each do |doc| doc = RSolr::Message::Document.new(doc) if doc.respond_to?(:each_pair) yield doc if block_given? add_node.doc_(doc.attrs) do |doc_node| doc.fields.each do |field_obj| doc_node.field field_obj.value, field_obj.attrs end end end end end end |
#build {|b| ... } ⇒ Object
20 21 22 23 24 25 |
# File 'lib/rsolr-nokogiri.rb', line 20 def build &block require 'nokogiri' b = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') yield b if block_given? b.to_xml end |
#commit(opts = {}) ⇒ Object
generates a
70 71 72 |
# File 'lib/rsolr-nokogiri.rb', line 70 def commit(opts={}) build {|xml| xml.commit opts} end |
#delete_by_id(ids) ⇒ Object
generates a
86 87 88 89 90 91 92 93 |
# File 'lib/rsolr-nokogiri.rb', line 86 def delete_by_id(ids) ids = [ids] unless ids.is_a?(Array) build do |xml| xml.delete do |delete_node| ids.each { |id| delete_node.id_(id) } end end end |
#delete_by_query(queries) ⇒ Object
generates a
97 98 99 100 101 102 103 104 |
# File 'lib/rsolr-nokogiri.rb', line 97 def delete_by_query(queries) queries = [queries] unless queries.is_a?(Array) build do |xml| xml.delete do |delete_node| queries.each { |query| delete_node.query query } end end end |
#optimize(opts = {}) ⇒ Object
generates a
75 76 77 |
# File 'lib/rsolr-nokogiri.rb', line 75 def optimize(opts={}) build {|xml| xml.optimize opts} end |
#rollback(opts = {}) ⇒ Object
generates a
80 81 82 |
# File 'lib/rsolr-nokogiri.rb', line 80 def rollback opts={} build {|xml| xml.rollback opts} end |