文档章节

Python读取Redis数据导出到Elasticsearch

go2school
 go2school
发布于 2015/12/29 20:40
字数 307
阅读 738
收藏 7
#! usr/bin/python
# -*- coding:utf-8 -*-
import redis
import datetime
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk
import sys, getopt

def usage():
	print 'usage: python cmd.py -e <elasticsearch host> -r <redis host> -p <redis list key prefix>'

if __name__ == '__main__':
	
	opts, args = getopt.getopt(sys.argv[1:], "e:r:p:")

	elasticsearch_host = ''
	redis_host = ''
	redis_list_prefix= ''
	for op, value in opts:
		if op == "-e":
			elasticsearch_host = value
		elif op == "-r":
			redis_host = value
		elif op == "-p":
			redis_list_prefix = value
		
	if elasticsearch_host == '' or redis_host == '' or redis_list_prefix == '':
		usage()
		sys.exit(1)
		
	client = Elasticsearch([{'host' : elasticsearch_host}])

	r = redis.Redis(host = redis_host, port=6379)

	doctype = "watchvideocount"

	#get all keys ends with day description except today
	videocount_keys = r.keys(redis_list_prefix + '_*')

	#start query data
	for k_index in videocount_keys:
		#get all <k, v> data
		kvalues = r.hgetall(k_index)
		
		#get day
		p = k_index.index('_')
		day = k_index[p+1:]	
			
		#make index name	
		index_name = k_index.lower()		
		#create index
		try:
			client.indices.create(index=index_name)
		except Exception:
			print 'index ', index_name, ' exist'
		namapping = {
				doctype: {
					"properties": {
						"day":{"type": "date"},
						"EID":{"type": "string"},
						"CID":{"type": "string"},
						"VID":{"type": "string"},
						"VALUE":{"type": "integer"}
					}
				}
			}
		client.indices.put_mapping(index=index_name, doc_type=doctype, body=namapping)
		
		#data cache
		data_cache = []	
		for key in kvalues:
			fields = key.split('_')
			eid = fields[0]
			cid = fields[1]
			vid = fields[2]
			value = kvalues[key]
			#make primary key
			ID = day + '_' + eid + '_' + cid + '_' + vid		
			#make JSON data
			json_data = {'_index':index_name, '_type':doctype, "_id":ID, "DAY":day, "EID":eid, "CID":cid, "VID":vid, "VALUE":value}	
			#append data cache
			data_cache.append(json_data)
		
		#index into elasticsearch	
		bulk(client, actions=data_cache, stats_only=True)
		print k_index, 'done'


© 著作权归作者所有

共有 人打赏支持
go2school
粉丝 11
博文 34
码字总数 14674
作品 0
技术主管
私信 提问
Scrapy分布式爬虫打造搜索引擎-(八)elasticsearch结合django搭建搜索引擎

Python分布式爬虫打造搜索引擎 基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站 推荐前往我的个人博客进行阅读:http://blog.mtianyan.cn/ 目录分章效果更佳哦 分章查看...

天涯明月笙
2017/07/01
0
0
一行命令:从 ELK 迁移日志服务

概述 日志服务相比自建 ELK 在功能、性能、规模和成本等方面有诸多优势,参阅自建ELK vs 日志服务(SLS)全方位对比。对于已经存储在 Elasticsearch 中的数据,用户只需要一行命令就能方便地将...

吴波bruce_wu
08/09
0
0
elasticsearch curator离线源码安装

1.安装setuptools wget https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip unzip setuptools-33.1.1.zip cd setuptools-33.1.1 python setup.py install 2.安装urllib3 w......

yuanyb
2017/10/20
0
0
Elasticsearch 1.7.0/1.6.1 发布,分布式搜索引擎

Elasticsearch 1.7.0 正式发布,基于 Lucene 4.10.4。同时还发布了 Elasticsearch 1.6.1 bug 修复版本。这两个版本都包括一个安全修复,建议所有用户升级最新版本! 下载: 最新稳定版: El...

淡漠悠然
2015/07/17
4.8K
10
Nginx + Naxsi + Nxapi + ElasticSearch + Kibana 安装

Author: Xu FC Platform: CentOS 7 -- Linux localhost.localdomain 3.10.0-693.21.1.el7.x8664 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x8664 x8664 x86_64 GNU/Linux 安装依赖 安装 libssl: ......

捞小虾
05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
41分钟前
1
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
42分钟前
2
0
linux定位应用问题的一些常用命令,特别针对内存和线程分析的dump命令

1.jps找出进程号,找到对应的进程号后面才好继续操作 2.linux查看进程详细信息 ps -ef | grep 进程ID 3. dump内存信息 Jmap -dump:format=b,file=YYMMddhhmm.dump pid 4.top查看cpu占用信息 ...

noob_chr
42分钟前
1
0
Android TV开发-按键焦点

写在前面 按键焦点过程了解 2.1 dispatchKeyEvent 过程了解 2.2 焦点查找请求过程了解 1.2.1 第一次获取焦点 1.2.3 按键焦点 焦点控制 焦点记忆 应用场景 参考资料 [TOC] 1. 写在前面 工...

冰雪情缘l
42分钟前
1
0
java框架学习日志-3

这章主要是补充一些ioc创建对象的方式,ioc容器在写好<bean></bean>的时候就已经创建对象了。在之前的例子中,一直都是无参的构造方法。下面给出有参的构造方法的对象的创建,没有什么难点重...

白话
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部