scholarslab/Geoloader

View on GitHub
lib/geoloader/services/solr.rb

Summary

Maintainability
A
0 mins
Test Coverage

require "rsolr-ext"

module Geoloader
  module Services

    class Solr

      attr_reader :resource

      #
      # Initialize the API wrapper.
      #
      def initialize
        @resource = RSolr::Ext.connect(:url => Geoloader.config.solr.url)
      end

      #
      # Add a new document to the index.
      #
      # @param [Geoloader::Asset] asset
      #
      def create_document(asset)
        @resource.add(asset.solr_document)
        @resource.commit
      end

      #
      # Count the number of documents in each workspace.
      #
      def get_workspace_counts

        workspaces = []

        # Select all documents, 0 rows, faceting on workspace.
        query = { :queries => "*:*", :facets => { :fields => "WorkspaceName" }, :rows => 0 }

        # Flatted out the counts.
        @resource.find(query).facets.each do |facet|
          facet.items.each do |item|
            workspaces << [item.value, item.hits]
          end
        end

        workspaces

      end

      #
      # Delete all documents in a workspace.
      #
      # @param [String] workspace
      #
      def delete_by_workspace(workspace)
        @resource.delete_by_query("WorkspaceName:#{workspace}")
        @resource.commit
      end

    end

  end
end