Class: MultiSolr::SolrFilterCollection
- Inherits:
-
SolrFilterSimple
- Object
- SolrFilterSimple
- MultiSolr::SolrFilterCollection
- Defined in:
- lib/multi_solr/solr_filter_collection.rb
Overview
Filter für einfachen Wert mit Wertebereich (und ggf. Trefferanzahl) als Collection. Der Wertebereich wird dabei über eine FacetSuche ermittelt (per Methode ‘list_possible_values’ des Searchers)
Instance Attribute Summary
Attributes inherited from SolrFilterSimple
Instance Method Summary collapse
-
#build_solr_query(value) ⇒ Object
overwrite super for array handling.
-
#collection_data(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich entweder über die bei den Options angegebene Proc oder über list_possible_values des Searchers (mit den Namen des Filters als Parameter) Params: core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler) context: Hash mit dem Such-Context.
-
#collection_data_with_count(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich und die jeweilige Anzahl entweder über die bei den Options angegebene Proc oder über list_possible_values_with_count des Searchers (mit den Namen des Filters als Parameter) Beispiel: Array mit Etagen: [[Etagennummer, Trefferanzahl],[Etagennummer, Trefferanzahl],…] in der Form: [[0, 3455, 0],[1, 163913],…] Params: core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler) context: Hash mit dem Such-Context.
-
#compact_values(value) ⇒ Object
Wandelt angegebenen value in ein Array (wenn es noch keins ist) Bereinigt das Array von leeren Elementen.
-
#initialize(filter_name, options = {}) ⇒ SolrFilterCollection
constructor
Constructor des Filters Params: filter_name: Name des Filters als Symbol options: optionale Hash mit den folgenden Optionen (sind alle optional): :render_value siehe Optionen bei MultiSolr::SolrFilterSimple.initialize :solr_query siehe Optionen bei MultiSolr::SolrFilterSimple.initialize :collection_data: Proc, welches den Wertebereich(Array) liefert Wenn nicht angegeben, dann wird per ‘Searcher.list_possible_values’ mit den Name des Filters der Wertebereich ermittelt.
-
#sanitize_values(values) ⇒ Object
Sanitize solr query value in a array of values.
Methods inherited from SolrFilterSimple
#label, #render_value, #sanitize_value
Constructor Details
#initialize(filter_name, options = {}) ⇒ SolrFilterCollection
Constructor des Filters Params:
filter_name: Name des Filters als Symbol
options: optionale Hash mit den folgenden Optionen (sind alle optional):
:render_value siehe Optionen bei MultiSolr::SolrFilterSimple.initialize
:solr_query siehe Optionen bei MultiSolr::SolrFilterSimple.initialize
:collection_data: Proc, welches den Wertebereich(Array) liefert
Wenn nicht angegeben, dann wird per 'Searcher.list_possible_values'
mit den Name des Filters der Wertebereich ermittelt.
Das Proc bekommt den Such-Context(Hash) als Parameter (enthält i.a. Searcher und force-query-params).
Beispiel: :collection_data => lambda{|context| (2..10).to_a }
:after_collect: optionales Proc, welches den Wertebereich(Array) nachbearbeitet
Das Proc bekommt den Wertebereich(Array) als Parameter
Beispiel: :after_collect => lambda{|data| MasterData::LockType.cached_find_for_short_names(data).map{|l| [l.full_label, l.short_name] } }
21 22 23 24 25 26 27 28 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 21 def initialize filter_name, ={} @collection_proc = .delete(:collection_data) @after_collect_proc = .delete(:after_collect) if [:render_value].nil? [:render_value] = Proc.new{|value| compact_values(value).join(', ') } end super filter_name, end |
Instance Method Details
#build_solr_query(value) ⇒ Object
overwrite super for array handling
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 32 def build_solr_query value return super(value) unless value.is_a? Array values = compact_values(value) return nil if values.empty? sani_values = sanitize_values values if @solr_query_proc q = @solr_query_proc.call(sani_values) else q = sani_values.map{|val| "#{@field_name}:#{val}"}.join(' OR ') if sani_values.size > 1 q = "(#{q})" end end q end |
#collection_data(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich entweder über die bei den Options angegebene Proc oder über list_possible_values des Searchers (mit den Namen des Filters als Parameter) Params:
core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler)
context: Hash mit dem Such-Context.
search_request: optional bestehendes SearchRequest (für DrillDown-Funktionalität)
returns: Array mit dem Wertebereich
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 58 def collection_data core_handler, context, search_request=nil if @collection_proc data = @collection_proc.call(context) else data = core_handler.cached_list_possible_values(@field_name, context, search_request) end if @after_collect_proc data = @after_collect_proc.call(data) data.compact! end data end |
#collection_data_with_count(core_handler, context, search_request = nil) ⇒ Object
Ermittelt den Wertebereich und die jeweilige Anzahl entweder über die bei den Options angegebene Proc oder über list_possible_values_with_count des Searchers (mit den Namen des Filters als Parameter) Beispiel: Array mit Etagen: [[Etagennummer, Trefferanzahl],[Etagennummer, Trefferanzahl],…] in der Form: [[0, 3455, 0],[1, 163913],…] Params:
core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler)
context: Hash mit dem Such-Context.
search_request: optional bestehendes SearchRequest (für DrillDown-Funktionalität)
returns: Array mit dem Wertebereich
80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 80 def collection_data_with_count core_handler, context, search_request=nil if @collection_proc data = @collection_proc.call(context) else data = core_handler.cached_list_possible_values_with_count(@field_name, context, search_request) end if @after_collect_proc data = @after_collect_proc.call(data) data.compact! end data end |
#compact_values(value) ⇒ Object
Wandelt angegebenen value in ein Array (wenn es noch keins ist) Bereinigt das Array von leeren Elementen
96 97 98 99 100 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 96 def compact_values value value = [value] unless value.is_a?(Array) value.delete_if(&:blank?) value end |
#sanitize_values(values) ⇒ Object
Sanitize solr query value in a array of values
103 104 105 |
# File 'lib/multi_solr/solr_filter_collection.rb', line 103 def sanitize_values values values.map{|val| sanitize_value(val) } end |