def set_knowledge_inv_index(self): qfactor_keys = self.get_all_question_factor_keys() keys = reduce(list.__add__, qfactor_keys.values()) k_idx = {} for key in keys: qtype, qid = key.split('/')[-2:] k_str, m_str, k_m_str, diff = self.redis_db.lrange(key, 0, -1) k_mat = load_matrix(k_str) for ktag in k_mat.keys(): k_idx.setdefault(ktag, {}) value = ":".join([qid, diff]) k_idx[ktag].setdefault(qtype, []).append(value) modified_fields = set() for ktag, item in k_idx.iteritems(): for qtype, qids in item.iteritems(): field = '%s:%s' % (ktag, qtype) value = "|".join(qids) # qids 中每项是 'qid:k_mat_value' self.redis_db.hset(self.KNOWLEDGE_INV_INDEX, field, value) modified_fields.add(field) self.flush_inv_index(self.KNOWLEDGE_INV_INDEX, modified_fields)
def _extractor(x): mat = load_matrix(x) res = [":".join([str(tag), diff]) for tag in mat.keys()] return "|".join(res)