multi-solr 01.10.00 → 01.11.00
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -71,39 +71,60 @@ class MultiSolr::SingleCoreHandler
|
|
|
71
71
|
# searcher.list_possible_values :lkz, :whs_id => 5
|
|
72
72
|
#
|
|
73
73
|
def list_possible_values fieldname, context=nil, search_request=nil, config=nil
|
|
74
|
+
value_pair_data = list_possible_values_with_count fieldname, context, search_request, config
|
|
75
|
+
values = []
|
|
76
|
+
# es werden nur die Werte benötigt und deshalb aus den [value,count]-Paaren entnommen
|
|
77
|
+
value_pair_data.each do |value_count_pair|
|
|
78
|
+
values << value_count_pair[0]
|
|
79
|
+
end
|
|
80
|
+
# Ergebnis ist ein Array mit Werten
|
|
81
|
+
values
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Liefert zu dem spezifizierten Kontext und Feld die möglichen Werte und die dazugehörige Anzahl an Treffern.
|
|
85
|
+
# Parameter:
|
|
86
|
+
# fieldname: Name des Feldes (als Symbol)
|
|
87
|
+
# context: optionales Object mit weiteren Context-Informationen, dieser wird an den Force-Query-Builder übergeben
|
|
88
|
+
# search_request: optional bestehendes SearchRequest (für DrillDown-Funktionalität)
|
|
89
|
+
# config: Config-Data, used as optional parameter for query-build
|
|
90
|
+
# Beispiel:
|
|
91
|
+
# searcher.list_possible_values :lkz, :whs_id => 5
|
|
92
|
+
#
|
|
93
|
+
def list_possible_values_with_count fieldname, context=nil, search_request=nil, config=nil
|
|
74
94
|
search_request ||= MultiSolr::SearchRequest.new
|
|
75
95
|
search_request.facets = [fieldname]
|
|
76
96
|
result = search(search_request, :context => context, :facets_only => true, :config => config)
|
|
77
97
|
facet_counts = result.facet_counts
|
|
78
|
-
values =
|
|
98
|
+
values = {}
|
|
79
99
|
if MultiSolr.logger.debug?
|
|
80
|
-
MultiSolr.logger.debug "#{self.class.name}.
|
|
100
|
+
MultiSolr.logger.debug "#{self.class.name}.list_possible_values_with_count(#{fieldname}, #{context.inspect}, #{search_request.inspect}): facet_counts=#{facet_counts.inspect}"
|
|
81
101
|
end
|
|
82
102
|
if facet_counts
|
|
83
103
|
value_pairs = facet_counts[fieldname.to_s]
|
|
84
104
|
if value_pairs && !value_pairs.empty?
|
|
85
105
|
# das value_pairs besteht Paar-weise aus Value und Anzahl
|
|
86
|
-
# Es werden hier nur die
|
|
106
|
+
# Es werden hier nur die Paare gebraucht, wo die Anzahl >0 ist
|
|
87
107
|
only_int = true
|
|
88
108
|
value_pairs.each do |value_count_pair|
|
|
89
109
|
val, count = value_count_pair
|
|
90
110
|
if val && count > 0
|
|
91
111
|
only_int = false if only_int && !val.match(/^[0-9]+$/)
|
|
92
|
-
|
|
112
|
+
# Value und Anzahl in die Ergebnis-Hash schreiben
|
|
113
|
+
values[val] = count
|
|
93
114
|
end
|
|
94
115
|
end
|
|
95
|
-
# wenn val nur aus Zahlen besteht,
|
|
96
|
-
values.map
|
|
97
|
-
values.
|
|
116
|
+
# wenn val nur aus Zahlen besteht, werden die keys nach Integer konvertiert (wegen der Sortierung)
|
|
117
|
+
values = Hash[values.map {|k, v| [k.to_i, v] }] if only_int
|
|
118
|
+
value_pair_data = values.sort_by { |value, count| value }
|
|
98
119
|
end
|
|
99
120
|
end
|
|
100
121
|
if MultiSolr.logger.debug?
|
|
101
|
-
MultiSolr.logger.debug "#{self.class.name}.
|
|
122
|
+
MultiSolr.logger.debug "#{self.class.name}.list_possible_values_with_count(#{fieldname}, #{context.inspect}) => #{values.inspect}"
|
|
102
123
|
end
|
|
103
|
-
|
|
124
|
+
# Ergebnis ist ein Array mit Arrays bestehend aus [value,count]-Paaren: [[value, count], [value,count],..]
|
|
125
|
+
value_pair_data
|
|
104
126
|
end
|
|
105
127
|
|
|
106
|
-
|
|
107
128
|
# Ermittelt und cached die möglichen Werte der als pre_cache_value_fields definierten Felder
|
|
108
129
|
# Diese werden im Rails-Cache zwischengespeichert
|
|
109
130
|
# Parameter:
|
|
@@ -125,7 +146,26 @@ class MultiSolr::SingleCoreHandler
|
|
|
125
146
|
values
|
|
126
147
|
end
|
|
127
148
|
|
|
128
|
-
|
|
149
|
+
# Ermittelt und cached die möglichen Werte mit Anzahl der als pre_cache_value_fields definierten Felder
|
|
150
|
+
# Diese werden im Rails-Cache zwischengespeichert
|
|
151
|
+
# Parameter:
|
|
152
|
+
# fieldname: Name des Feldes (als Symbol)
|
|
153
|
+
# context: optionales Object mit weiteren Context-Informationen, dieser wird an den Force-Query-Builder übergeben
|
|
154
|
+
# config: Config-Data, used as optional parameter for query-build
|
|
155
|
+
# expires_in: optional, Gültigkeit des Cache-Wertes in Sekunden, default ist 3 Stunden
|
|
156
|
+
#
|
|
157
|
+
def cached_list_possible_values_with_count fieldname, context=nil, config=nil, expires_in=3.hours
|
|
158
|
+
cache_key = "solr-#{self.core_name}-#{context}-#{fieldname}-values-with-count"
|
|
159
|
+
values = MultiSolr.cache.read(cache_key)
|
|
160
|
+
if values.nil?
|
|
161
|
+
# dann sind noch gar keine Werte gecached => diese holen
|
|
162
|
+
values = list_possible_values_with_count fieldname, context, nil, config
|
|
163
|
+
# und nun im Cache ablegen
|
|
164
|
+
MultiSolr.logger.debug "#{self.class.name}.cached_list_possible_values_with_count: write in cache '#{cache_key}' => #{values.inspect}" if MultiSolr.logger.debug?
|
|
165
|
+
MultiSolr.cache.write(cache_key, values, :expires_in => expires_in)
|
|
166
|
+
end
|
|
167
|
+
values
|
|
168
|
+
end
|
|
129
169
|
|
|
130
170
|
|
|
131
171
|
# ermitteln Zeitstempel des letzten Datenimports
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
# Filter für einfachen Wert mit Wertebereich als Collection
|
|
2
|
-
# und Darstellung als Select-Box.
|
|
1
|
+
# Filter für einfachen Wert mit Wertebereich (und ggf. Trefferanzahl) als Collection.
|
|
3
2
|
# Der Wertebereich wird dabei über eine FacetSuche ermittelt (per Methode 'list_possible_values' des Searchers)
|
|
4
3
|
#
|
|
5
4
|
class MultiSolr::SolrFilterCollection < MultiSolr::SolrFilterSimple
|
|
@@ -69,6 +68,28 @@ class MultiSolr::SolrFilterCollection < MultiSolr::SolrFilterSimple
|
|
|
69
68
|
data
|
|
70
69
|
end
|
|
71
70
|
|
|
71
|
+
# Ermittelt den Wertebereich und die jeweilige Anzahl entweder über die bei den Options angegebene Proc
|
|
72
|
+
# oder über list_possible_values_with_count des Searchers (mit den Namen des Filters als Parameter)
|
|
73
|
+
# Beispiel: Array mit Etagen: [[Etagennummer, Trefferanzahl],[Etagennummer, Trefferanzahl],...]
|
|
74
|
+
# in der Form: [[0, 3455, 0],[1, 163913],...]
|
|
75
|
+
# Params:
|
|
76
|
+
# core_handler: Instanz des konkreten Solr-CoreHandler (MultiSolr::SingleCoreHandler)
|
|
77
|
+
# context: Hash mit dem Such-Context.
|
|
78
|
+
# search_request: optional bestehendes SearchRequest (für DrillDown-Funktionalität)
|
|
79
|
+
# returns: Array mit dem Wertebereich
|
|
80
|
+
def collection_data_with_count core_handler, context, search_request=nil
|
|
81
|
+
if @collection_proc
|
|
82
|
+
data = @collection_proc.call(context)
|
|
83
|
+
else
|
|
84
|
+
data = core_handler.cached_list_possible_values_with_count(@field_name, context, search_request)
|
|
85
|
+
end
|
|
86
|
+
if @after_collect_proc
|
|
87
|
+
data = @after_collect_proc.call(data)
|
|
88
|
+
data.compact!
|
|
89
|
+
end
|
|
90
|
+
data
|
|
91
|
+
end
|
|
92
|
+
|
|
72
93
|
|
|
73
94
|
# Wandelt angegebenen value in ein Array (wenn es noch keins ist)
|
|
74
95
|
# Bereinigt das Array von leeren Elementen
|
data/lib/multi_solr/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: multi-solr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 01.
|
|
4
|
+
version: 01.11.00
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rsolr
|
|
@@ -188,18 +188,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
188
188
|
- - ! '>='
|
|
189
189
|
- !ruby/object:Gem::Version
|
|
190
190
|
version: '0'
|
|
191
|
-
segments:
|
|
192
|
-
- 0
|
|
193
|
-
hash: 727765555297971495
|
|
194
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
192
|
none: false
|
|
196
193
|
requirements:
|
|
197
194
|
- - ! '>='
|
|
198
195
|
- !ruby/object:Gem::Version
|
|
199
196
|
version: '0'
|
|
200
|
-
segments:
|
|
201
|
-
- 0
|
|
202
|
-
hash: 727765555297971495
|
|
203
197
|
requirements: []
|
|
204
198
|
rubyforge_project: multi-solr
|
|
205
199
|
rubygems_version: 1.8.24
|