def set_math_knowledge_inv_index(redis_db): qfactor_keys = get_all_question_factor_keys(redis_db) 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 = 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' redis_db.hset(MATH_KNOWLEDGE_INV_INDEX, field, value) modified_fields.add(field) flush_inv_index(redis_db, MATH_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)
def load_card_factor(redis_db, key): try: k_str = redis_db.get(key) except ValueError: k_str = '{}' return load_matrix(k_str)
def _extractor(x): mat = load_matrix(x) res = [":".join([str(tag), diff]) for tag in mat.keys()] return "|".join(res)