Class: Blacklight::Solr::Repository
- Inherits:
-
AbstractRepository
- Object
- AbstractRepository
- Blacklight::Solr::Repository
- Defined in:
- lib/blacklight/solr/repository.rb
Instance Attribute Summary
Attributes inherited from AbstractRepository
#blacklight_config, #connection
Instance Method Summary collapse
-
#find(id, params = {}) ⇒ Object
Find a single solr document result (by id) using the document configuration.
-
#find_many(params) ⇒ Object
Find multiple documents by their ids.
-
#ping? ⇒ boolean
(also: #ping)
True if the repository is reachable.
-
#reflect_fields ⇒ Hash
Gets a list of available fields.
-
#search(pos_params = nil, path: nil, params: nil, **kwargs) ⇒ Object
Execute a search query against solr.
-
#send_and_receive(path, solr_params = {}) ⇒ Blacklight::Solr::Response
Execute a solr query at the given path with the parameters TODO: Make this private after we have a way to abstract admin/luke and ping.
- #suggestions(request_params) ⇒ Blacklight::Suggest::Response
Methods inherited from AbstractRepository
Constructor Details
This class inherits a constructor from Blacklight::AbstractRepository
Instance Method Details
#find(id, params = {}) ⇒ Object
Find a single solr document result (by id) using the document configuration
9 10 11 12 13 14 15 16 |
# File 'lib/blacklight/solr/repository.rb', line 9 def find id, params = {} doc_params = SingleDocSearchBuilder.new(self, id, params) solr_response = send_and_receive blacklight_config.document_solr_path || blacklight_config.solr_path, doc_params raise Blacklight::Exceptions::RecordNotFound if solr_response.documents.empty? solr_response end |
#find_many(params) ⇒ Object
Find multiple documents by their ids
20 21 22 |
# File 'lib/blacklight/solr/repository.rb', line 20 def find_many(params) search(params: params, path: blacklight_config.fetch_many_documents_path) end |
#ping? ⇒ boolean Also known as: ping
Returns true if the repository is reachable.
55 56 57 58 59 |
# File 'lib/blacklight/solr/repository.rb', line 55 def ping? response = connection.send_and_receive 'admin/ping', {} Blacklight.logger&.info("Ping [#{connection.uri}] returned: '#{response['status']}'") response['status'] == "OK" end |
#reflect_fields ⇒ Hash
Gets a list of available fields
48 49 50 51 |
# File 'lib/blacklight/solr/repository.rb', line 48 def reflect_fields doc_params = FieldReflectionSearchBuilder.new(self) send_and_receive('admin/luke', doc_params)['fields'] end |
#search(pos_params = nil, path: nil, params: nil, **kwargs) ⇒ Object
Execute a search query against solr
28 29 30 31 32 33 34 35 36 |
# File 'lib/blacklight/solr/repository.rb', line 28 def search pos_params = nil, path: nil, params: nil, **kwargs if pos_params Blacklight.deprecation.warn("Passing positional arguments to search() is deprecated. Use the params kwarg instead.") end request_params = (params || pos_params || {}).reverse_merge(kwargs).reverse_merge({ qt: blacklight_config.qt }) send_and_receive(path || default_search_path(request_params), request_params) end |
#send_and_receive(path, solr_params = {}) ⇒ Blacklight::Solr::Response
Execute a solr query at the given path with the parameters TODO: Make this private after we have a way to abstract admin/luke and ping
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/blacklight/solr/repository.rb', line 71 def send_and_receive(path, solr_params = {}) benchmark("Solr fetch", level: :debug) do res = connection.send_and_receive(path, build_solr_request(solr_params)) solr_response = blacklight_config.response_model.new(res, solr_params, document_model: blacklight_config.document_model, blacklight_config: blacklight_config) Blacklight.logger&.debug("Solr query: #{blacklight_config.http_method} #{path} #{solr_params.to_hash.inspect}") Blacklight.logger&.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) && ::BLACKLIGHT_VERBOSE_LOGGING solr_response end rescue *defined_rsolr_timeout_exceptions => e raise Blacklight::Exceptions::RepositoryTimeout, "Timeout connecting to Solr instance using #{connection.inspect}: #{e.inspect}" rescue Errno::ECONNREFUSED => e # intended for and likely to be a RSolr::Error:ConnectionRefused, specifically. raise Blacklight::Exceptions::ECONNREFUSED, "Unable to connect to Solr instance using #{connection.inspect}: #{e.inspect}" rescue RSolr::Error::Http => e raise Blacklight::Exceptions::InvalidRequest, e. end |
#suggestions(request_params) ⇒ Blacklight::Suggest::Response
40 41 42 43 |
# File 'lib/blacklight/solr/repository.rb', line 40 def suggestions(request_params) suggest_results = connection.send_and_receive(suggest_handler_path, params: request_params) Blacklight::Suggest::Response.new suggest_results, request_params, suggest_handler_path, suggester_name end |