def mutate_facet_tokens(book): facet_fields = [ ["authors"], ["publishers"], ["subjects"], ["subject", "subjects"], ["source"], ["language"], ["languages"], ["language_code"], ["has_fulltext"], ["facet_year"], ] all_tokens = [] for ff in facet_fields: fieldname = ff[0] label = fieldname if len(ff) == 1 else ff[1] # if 'sub' in label: pdb.set_trace() vs = book.get(fieldname) if type(vs) != list: vs = [vs] all_tokens.extend(facet_token(label, v) for v in vs if v) all_tokens = sorted(set(all_tokens)) if all_tokens: book["facet_tokens"] = " ".join(all_tokens)
def get_facet_tokens(buf, dd): # for each facet field: # generate facet tokens # insert tokens into buf global token_counts # should get facet fields from schema, not put them here. @@ facet_fields = ('authors', 'publisher', 'subject', ('subjects', 'subject'), 'source', 'language', 'language_code', 'has_fulltext', 'facet_year', ) tokens = [] for xfield in facet_fields: if type(xfield) == tuple: field, flabel = xfield else: field = flabel = xfield for idx,v in dd.get(field, []): assert buf[idx][0] == field token_counts[field] += 1 tokens.append(facet_token(flabel, v)) return tokens
def exact_facet_count(self, query, facet_name, facet_value): ftoken = facet_token(facet_name, facet_value) result_json = self.raw_search( '%s facet_tokens:%s'% (query, ftoken), rows=0, wt='json') result = simplejson.loads(result_json) n = result['response']['numFound'] return n
def Xfacet_token_inverse(self, token, facet_list = default_facet_list): # for now, just pull this straight from the SE # need to add an LRU cache for performance. @@ if not re.match('^[a-z]+$', token): raise SolrError, 'invalid facet token' m = simplejson.loads(self.raw_search('facet_tokens:%s'% token, rows=1, wt='json')) facet_set = set(facet_list) for d in m['response']['docs']: for k,vx in d.iteritems(): kfs = k in facet_set # if not kfs: continue vvx = {str:(vx,), list:vx}.get(type(vx),()) for v in map(unicode, vvx): ft = facet_token(k,v) if facet_token(k,v) == token: return (k,v) return None
def Xfacet_token_inverse(self, token, facet_list=default_facet_list): # for now, just pull this straight from the SE # need to add an LRU cache for performance. @@ if not re.match('^[a-z]+$', token): raise SolrError, 'invalid facet token' m = simplejson.loads( self.raw_search('facet_tokens:%s' % token, rows=1, wt='json')) facet_set = set(facet_list) for d in m['response']['docs']: for k, vx in d.iteritems(): kfs = k in facet_set # if not kfs: continue vvx = {str: (vx, ), list: vx}.get(type(vx), ()) for v in map(unicode, vvx): if facet_token(k, v) == token: return (k, v) return None
def exact_facet_count(self, query, selected_facets, facet_name, facet_value): ftoken = facet_token(facet_name, facet_value) # this function is temporarily broken because of how facets are handled # under dismax. @@ # well, ok, the use of dismax is temporarily backed out, but leave # this signal here to verify that we're not actually using exact # counts right now. raise NotImplementedError sf = list(s for s in selected_facets if re.match('^[a-z]{12}$', s)) fs = ' '.join(sf + [ftoken]) result_json = self.raw_search(self.basic_query(query), fq='facet_tokens:(%s)' % fs, rows=0, wt='json') result = simplejson.loads(result_json) n = result['response']['numFound'] return n
def exact_facet_count(self, query, selected_facets, facet_name, facet_value): ftoken = facet_token(facet_name, facet_value) # this function is temporarily broken because of how facets are handled # under dismax. @@ # well, ok, the use of dismax is temporarily backed out, but leave # this signal here to verify that we're not actually using exact # counts right now. raise NotImplementedError sf = list(s for s in selected_facets if re.match('^[a-z]{12}$', s)) fs = ' '.join(sf+[ftoken]) result_json = self.raw_search( self.basic_query(query), fq='facet_tokens:(%s)'% fs, rows=0, wt='json') result = simplejson.loads(result_json) n = result['response']['numFound'] return n