def get_evaluate_max(index_name): max_result = {} index_type = 'bci' evaluate_index = ['user_index'] for evaluate in evaluate_index: query_body = { 'query': { 'match_all': {} }, 'size': 1, 'sort': [{ evaluate: { 'order': 'desc' } }] } # try: result = es_cluster.search(index=index_name, doc_type=index_type, body=query_body)['hits']['hits'] # except Exception, e: # raise e max_evaluate = result[0]['_source'][evaluate] max_result[evaluate] = max_evaluate return max_result
def get_user_detail(date, input_result): bci_date = ts2datetime(datetime2ts(date) - DAY) results = [] uid_list = input_result if date!='all': index_name = 'bci_' + ''.join(bci_date.split('-')) else: now_ts = time.time() now_date = ts2datetime(now_ts) index_name = 'bci_' + ''.join(now_date.split('-')) index_type = 'bci' user_bci_result = es_cluster.mget(index=index_name, doc_type=index_type, body={'ids':uid_list}, _source=True)['docs'] #INFLUENCE,fans,status user_profile_result = es_user_profile.mget(index=profile_index_name, doc_type=profile_index_type, body={'ids':uid_list}, _source=True)['docs'] #个人姓名,注册地 max_evaluate_influ = get_evaluate_max(index_name) for i in range(0, len(uid_list)): uid = uid_list[i] bci_dict = user_bci_result[i] profile_dict = user_profile_result[i] try: bci_source = bci_dict['_source'] except: bci_source = None if bci_source: influence = bci_source['user_index'] influence = math.log(influence/float(max_evaluate_influ['user_index']) * 9 + 1 ,10) influence = influence * 100 else: influence = '' try: profile_source = profile_dict['_source'] except: profile_source = None if profile_source: uname = profile_source['nick_name'] location = profile_source['user_location'] try: fansnum = bci_dict['fields']['user_fansnum'][0] except: fansnum = 0 try: statusnum = bci_dict['fields']['weibo_month_sum'][0] except: statusnum = 0 else: uname = uid location = '' try: fansnum = bci_dict['fields']['user_fansnum'][0] except: fansnum = 0 try: statusnum = bci_dict['fields']['weibo_month_sum'][0] except: statusnum = 0 results.append({'uid':uid, 'uname':uname, 'location':location, 'fansnum':fansnum, 'statusnum':statusnum, 'influence':round(influence,2)}) return results
def get_detail_org(uid_list, user_name): if len(uid_list) == 0: return {} result = {} user_bci_result = es_cluster.mget(index=index_name, doc_type=index_type, body={'ids': uid_list}, _source=True)['docs'] search_result = es_user_portrait.mget(index=portrait_index_name, doc_type=portrait_index_type, body={"ids": uid_list})["docs"] if len(search_result) == 0: return result for i in range(0, len(search_result)): item = search_result[i] uid = item['_id'] if not item['found']: result[uid] = {} continue else: data = item['_source'] if not data['uname']: name = '' else: name = data['uname'].encode('utf-8') if not data['location']: location = '' else: location = data['location'].encode('utf-8') if not data['verify_type']: verified = '' else: verified = ver_data[data['verify_type']] work_tag = data['function_mark'].encode('utf-8') tags = work_tag.split('&') tag_list = [] for tag in tags: u, t = tag.split('_') if u == user_name: tag_str.append(t) bci_dict = user_bci_result[i] try: fansnum = bci_dict['fields']['user_fansnum'][0] except: fansnum = 0 result[uid] = { 'name': name, 'location': location, 'verified': verified, 'tag': work_tag, 'fansnum': fansnum } return result
def search_bci(uid):#获取用户的粉丝数、关注数和微博数 uid_list = [uid] date = 1480176000#time.time() bci_date = ts2datetime(date - DAY) index_name = 'bci_' + ''.join(bci_date.split('-')) index_type = 'bci' user_bci_result = es_cluster.mget(index=index_name, doc_type=index_type, body={'ids':uid_list})['docs'] if len(user_bci_result): return {'fansnum':'', 'statusnum':'', 'friendnum':''} result = {'fansnum':'', 'statusnum':'', 'friendnum':''} for item in user_bci_result: if not item['found']: return result else: data = item['_source'] fansnum = data['user_fansnum'] friendsnum = data['user_friendsnum'] statusnum = data['origin_weibo_number']+data['retweeted_weibo_number'] result = {'fansnum':fansnum, 'statusnum':statusnum, 'friendnum':friendsnum} return result
} try: top_sensitive_result = es_bci_history.search( index=ES_SENSITIVE_INDEX, doc_type=DOCTYPE_SENSITIVE_INDEX, body=query_sensitive_body, _source=False, fields=[sensitive_string])['hits']['hits'] top_sensitive = top_sensitive_result[0]['fields'][sensitive_string][0] except Exception, reason: print Exception, reason top_sensitive = 400 index_type = 'bci' user_bci_result = es_cluster.mget( index=index_name, doc_type=index_type, body={'ids': uid_list}, _source=True)['docs'] #INFLUENCE,fans,status user_profile_result = es_user_profile.mget(index='weibo_user', doc_type='user', body={'ids': uid_list}, _source=True)['docs'] #个人姓名,注册地 # bci_history_result = es_bci_history.mget(index=bci_history_index_name, doc_type=bci_history_index_type, body={"ids":uid_list}, fields=['user_fansnum', 'weibo_month_sum'])['docs'] # sensitive_history_result = es_bci_history.mget(index=ES_SENSITIVE_INDEX, doc_type=DOCTYPE_SENSITIVE_INDEX, body={'ids':uid_list}, fields=[sensitive_string], _source=False)['docs'] max_evaluate_influ = get_evaluate_max(index_name) for i in range(0, len(uid_list)): uid = uid_list[i] bci_dict = user_bci_result[i] profile_dict = user_profile_result[i] # bci_history_dict = bci_history_result[i] # sensitive_history_dict = sensitive_history_result[i]