Sha256: ec356e03e5ef6174b9c86d1aabcb793811889580252c7088502008d5226e91e0

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

module Spotlight
  module Resources
    # Base Resource indexer for objects in DOR
    class DorSolrDocumentBuilder < Spotlight::SolrDocumentBuilder
      include ActiveSupport::Benchmarkable

      delegate :indexable_resources, to: :resource

      ##
      # Generate solr documents for the DOR resources identified by this object
      #
      # @return [Enumerator] an enumerator of solr document hashes for indexing
      def to_solr
        return to_enum(:to_solr) { size } unless block_given?

        benchmark "Indexing resource #{inspect} (est. #{size} items)" do
          base_doc = super

          indexable_resources.each_with_index do |res, idx|
            benchmark "Indexing item #{res.druid} in resource #{resource_id} (#{idx} / #{size})" do
              doc = to_solr_document(res)
              yield base_doc.merge(doc) if doc
            end
          end
        end
      end

      private

      def resource_id
        resource.id
      end

      ##
      # Estimate the number of documents this resource will create
      def size
        indexable_resources.size
      end

      ##
      # Generate the solr document hash for a given resource by applying the current
      # indexer steps.
      #
      # @return [Hash]
      def to_solr_document(resource)
        Spotlight::Dor::Resources.indexer.solr_document(resource)
      rescue RuntimeError => e
        logger.error("Error processing #{resource.druid}: #{e}")
        nil
      rescue => e
        logger.error("Error processing #{resource.druid}: #{e}")
        raise e
      end

      ##
      # Write any logs (or benchmarking information) from this class to the gdor logs
      def logger
        Spotlight::Dor::Resources.indexer.logger
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spotlight-dor-resources-2.0.1 app/services/spotlight/resources/dor_solr_document_builder.rb
spotlight-dor-resources-2.0.0 app/services/spotlight/resources/dor_solr_document_builder.rb