示例#1
0
 def add_stats_ranges_from_solr(self, query):
     """ gets solr stats by searching solr
         searches solr to get raw solr search results
     """
     stats_query = self.compose_query()  # make the stats query
     response = self.solr.search(**stats_query)  # execute solr query
     solr_json = response.raw_content
     if isinstance(solr_json, dict):
         if 'stats' in solr_json:
             if 'stats_fields' in solr_json['stats']:
                 qm = QueryMaker()
                 groups = qm.histogram_groups
                 for solr_field_key, stats in solr_json['stats']['stats_fields'].items():
                     if stats is not None:
                         if solr_field_key not in query['facet.range']:
                             query['facet.range'].append(solr_field_key)
                         if solr_field_key not in query['stats.field']:
                             query['stats.field'].append(solr_field_key)
                         fstart = 'f.' + solr_field_key + '.facet.range.start'
                         fend = 'f.' + solr_field_key + '.facet.range.end'
                         fgap = 'f.' + solr_field_key + '.facet.range.gap'
                         findex = 'f.' + solr_field_key + '.facet.sort'
                         fother = 'f.' + solr_field_key + '.facet.range.other'
                         finclude = 'f.' + solr_field_key + '.facet.range.include'
                         query[fother] = 'all'
                         query[finclude] = 'all'
                         if 'count' in stats:
                             if (stats['count'] / qm.histogram_groups) < 3:
                                 groups = 4
                         if '___pred_date' in solr_field_key:
                             query[fstart] = qm.convert_date_to_solr_date(stats['min'])
                             query[fend] = qm.convert_date_to_solr_date(stats['max'])
                             query[fgap] = qm.get_date_difference_for_solr(stats['min'], stats['max'], groups)
                             query[findex] = 'index'  # sort by index, not by count
                         else:
                             query[fstart] = stats['min']
                             query[fend] = stats['max']
                             query[fgap] = ((stats['max'] - stats['min']) / groups)
                             if query[fgap] > stats['mean']:
                                 query[fgap] = stats['mean'] / 3;
                             # query[fgap] = ((stats['max'] - stats['min']) / groups) - ((stats['max'] - stats['min']) / groups) * .01
                             query[findex] = 'index'  # sort by index, not by count
     return query
示例#2
0
 def add_date_fields(self, solr_json):
     """ adds numeric fields with query options """
     date_fields = []
     date_facet_ranges = self.get_solr_ranges(solr_json, 'date')
     if date_facet_ranges is not False:
         for solr_field_key, ranges in date_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min-date'] = ranges['start']
             field['oc-api:max-date'] = ranges['end']
             field['oc-api:gap-date'] = ranges['gap']
             field['oc-api:has-range-options'] = []
             i = -1
             qm = QueryMaker()
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 dt_end = qm.add_solr_gap_to_date(range_min_key,
                                                  ranges['gap'])
                 range_end = qm.convert_date_to_solr_date(dt_end)
                 solr_range = '[' + range_min_key + ' TO ' + range_end + ' ]'
                 new_rparams = fl.add_to_request('prop', solr_range, slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(
                     new_rparams, '.json')
                 range_dict['label'] = qm.make_human_readable_date(
                     range_min_key) + ' to ' + qm.make_human_readable_date(
                         range_end)
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min-date'] = range_min_key
                 range_dict['oc-api:max-date'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             date_fields.append(field)
     if len(date_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-date-facets'] = date_fields
示例#3
0
 def add_date_fields(self, solr_json):
     """ adds numeric fields with query options """
     date_fields = []
     date_facet_ranges = self.get_solr_ranges(solr_json, 'date')
     if date_facet_ranges is not False:
         for solr_field_key, ranges in date_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min-date'] = ranges['start']
             field['oc-api:max-date'] = ranges['end']
             field['oc-api:gap-date'] = ranges['gap']
             field['oc-api:has-range-options'] = []
             i = -1
             qm = QueryMaker()
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 dt_end = qm.add_solr_gap_to_date(range_min_key, ranges['gap'])
                 range_end = qm.convert_date_to_solr_date(dt_end)
                 solr_range = '[' + range_min_key + ' TO ' + range_end + ' ]'
                 new_rparams = fl.add_to_request('prop',
                                                 solr_range,
                                                 slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(new_rparams, '.json')
                 range_dict['label'] = qm.make_human_readable_date(range_min_key) + ' to ' + qm.make_human_readable_date(range_end)
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min-date'] = range_min_key
                 range_dict['oc-api:max-date'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             date_fields.append(field)
     if len(date_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-date-facets'] = date_fields