class ActiveFedora::RDF::IndexingService
def add_assertions(prefix_method, solr_doc = {})
def add_assertions(prefix_method, solr_doc = {}) fields.each do |field_key, field_info| solr_field_key = solr_document_field_name(field_key, prefix_method) Array(field_info[:values]).each do |val| append_to_solr_doc(solr_doc, solr_field_key, field_info, val) end end solr_doc end
def append_to_solr_doc(solr_doc, solr_field_key, field_info, val)
Solrizer.set_field(solr_doc, 'lcsh_subject_label', val.to_label, :searchable)
Solrizer.set_field(solr_doc, 'lcsh_subject_uri', val.to_uri, :symbol)
def append_to_solr_doc(solr_doc, field_key, field_info, val)
example:
Override this in order to allow one field to be expanded into more than one:
def append_to_solr_doc(solr_doc, solr_field_key, field_info, val) self.class.create_and_insert_terms(solr_field_key, solr_document_field_value(val), field_info[:behaviors], solr_doc) end
def fields
def fields field_map = {}.with_indifferent_access index_config.each do |name, index_field_config| type = index_field_config.data_type behaviors = index_field_config.behaviors next unless type and behaviors next if kind_of_af_base?(name) field_map[name] = { values: find_values(name), type: type, behaviors: behaviors} end field_map end
def find_values(name)
def find_values(name) object.send(name) || [] end
def generate_solr_document(prefix_method = nil)
-
(Hash)
- the solr document
Other tags:
- Yield: - yields the solr document
def generate_solr_document(prefix_method = nil) solr_doc = add_assertions(prefix_method) yield(solr_doc) if block_given? solr_doc end
def index_config
def index_config object.class.index_config end
def initialize(obj)
-
obj
(#resource, #rdf_subject
) -- the object to build an solr document for. Its class must respond to 'properties'
def initialize(obj) @object = obj end
def kind_of_af_base?(name)
def kind_of_af_base?(name) config = properties[name.to_s] config && config[:class_name] && config[:class_name] < ActiveFedora::Base end
def properties
def properties object.class.properties end
def resource
def resource object.resource end
def solr_document_field_name(field_key, prefix_method)
def solr_document_field_name(field_key, prefix_method) if prefix_method prefix_method.call(field_key) else field_key.to_s end end
def solr_document_field_value(val)
def solr_document_field_value(val) case val when ::RDF::URI val.to_s when ActiveTriples::Resource val.solrize else val end end