Пример #1
0
    def suggest(self, model_clz, query, limit=10, offset=0, order=None, ascending=True):
        """
        Suggest terms that would possibly yield more relevant results
        for the given query.
        """
        self.database.reopen()
        enq = Enquire(self.database)
        enq.set_collapse_key(DOC_ITEM_ID)
        if order is not None:
            if issubclass(type(order), basestring):
                order = self.sort_names.index(order)
                if order == -1:
                    raise TypeError("There is no sort name %s" % order)
            enq.set_sort_by_value(order, ascending)
        else:
            enq.set_sort_by_relevance()
        
        query_parser = self._query_parser()
        query = query_parser.parse_query(query)
        query = self._add_model_query(query,model_clz)
        log.debug(query)    
        enq.set_query(query)
        mset = enq.get_mset(offset, limit)
        rset = RSet()
        for m in mset:
            rset.add_document(m[MSET_DID])
            
        eset = enq.get_eset(limit, rset)

        for item in eset.items:
            yield (item[0].decode('utf8'), item[1])