Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 3
0
 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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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