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])