使用python操作elasticsearch实现数据插入分析

前言:

例行公事,有些人可能不太了解elasticsearch,下面搜了一段,大家瞅一眼。

Elasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析。它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部。除了通过HTTP直接访问Elasticsearch,还可以通过支持Java、JavaScript、Python及更多语言的客户端库来访问。它也支持集成Apache Hadoop环境。Elasticsearch在有些处理海量数据的公司中已经有所应用,如GitHub、Foursquare和SoundCloud等。

elasticsearch 他对外提供了rest的http的接口,貌似很强大的样子。 但是咱们的一些数据平台市场会对于elasticsearch的数据进行分析,尤其是实时分析。 当然不能用 http的方式。 比如官网的demo提供的例子:

下面是查询,/ceshi 是索引,rui是type,搜索的内容是,title是jones的。

curl http://vim.xiaorui.cc:9200/ceshi/rui/_search?q=title:jones&size=5&pretty=true

添加数据

curl -X POST      -d ‘{      "title": "jones",      "amount": 5.7    }‘

1.x之后,貌似不能直接curl,

注意,唯一标识符是放置在URL中而不是请求体中。如果您忽略这个标识符,搜索会返回一个错误,类似如下:

No handler found for uri [/ceshi/rui/] and method [PUT]

发现用0.90.x的人,还是很多的~

当然在python里面,咱们可以用urllib2来搞数据。

#xiaorui.cc
import urllib2
import urlib
import json

url = ‘http://vim.xiaorui.cc:9200/ceshi/rui‘
data = {
    ‘title‘: ‘jones‘,
    ‘amount‘: 5.7
    }

data = json.dumps(data)

req = urllib2.Request(url, data, headers)
out = urllib2.urlopen(req)
print out.read()

但是这样的话,速度明显有点慢,官方提供了更加快速更方便的方法。

>>> from datetime import datetime

>>> from elasticsearch import Elasticsearch

# 连接elasticsearch 的端口,默认是9200

>>> es = Elasticsearch()

# 创建索引,索引的名字是my-index, 如果已经存在了,就给个400

>>> es.indices.create(index=‘my-index‘, ignore=400)

{u‘acknowledged‘: True}

# 插入

>>> es.index(index="my-index", doc_type="test-type", id=42, body={"any": "data", "timestamp": datetime.now()})

{u‘_id‘: u‘42‘, u‘_index‘: u‘my-index‘, u‘_type‘: u‘test-type‘, u‘_version‘: 1, u‘ok‘: True}

# 查询

>>> es.get(index="my-index", doc_type="test-type", id=42)[‘_source‘]

{u‘any‘: u‘data‘, u‘timestamp‘: u‘2013-05-12T19:45:31.804229‘}

其实熟悉mongodb的人,再看elasticsearch的语法,会发现非常的熟悉。

res = es.search(
    index=‘belajar‘,
    doc_type=‘pesan‘,
    body={
      ‘query‘: {
        ‘range‘: {
          ‘postDate‘: {
          	‘from‘:‘20100101‘, ‘to‘:‘20140101‘
          }
        }
      }
    }
)

上面的意思是,查询这个时间段里面的数据。

res = es.search(
    index=‘belajar‘,
    doc_type=‘pesan‘,
    body={
      ‘query‘: {
        ‘match‘: {
          ‘user‘: ‘xiaorui‘
        }
      }
    }
)

上面是精确的匹配,匹配user值为 xiaorui 的数据。

一些详细的语法就不在描述了,大家看下官方的文档,然后再python引用就行了。

原文:http://rfyiamcool.blog.51cto.com/1030776/1420811

其实对我来说,我还是更喜欢用mongodb,他的bjson,让我爽到天,哈 ! 要是量大的话,用mongodb的分片,elasticsearch的dsl语法,还是让我有些看不下去。 我这里正在做通知平台,以前都是把数据放在mongodb,然后用各种图表展示。  我发现kibana很绚丽,就在研究kibana的一些个特性, 他只是为elasticsearch存在的。 所以大家也不要在尝试改掉kibana,直接把数据插入到elasticsearch,然后通过kibana显示就行了。

使用python操作elasticsearch实现数据插入分析,布布扣,bubuko.com

时间: 2024-10-14 07:49:18

使用python操作elasticsearch实现数据插入分析的相关文章

解决 C++ 操作 MySQL 大量数据插入效率低下问题

往 Mysql 中,插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 但是打开事务的话,一秒不到就搞定了 代码: #include <iostream> #include <winsock2.h> #include <string> #include "mysql.h" #pragma comment(lib, "libmysql.lib"); using namespace std; int main() { MYSQ

通过HTTP RESTful API 操作elasticsearch搜索数据

通过HTTP RESTful API 操作elasticsearch搜索数据

最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格

时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等. 学会对时间序列数据进行可视化,能够帮助我们更加直观地探索时间序列数据,寻找其潜在的规律. 本文会利用Python中的matplotlib[1]库,并配合实例进行讲解.matplotlib库是?个?于创建出版质量图表的桌?绘图包(2D绘图库),是Python中最基本的可视化工具. [工具]Python 3 [数据]Tushare [注]示例注重的是方法的讲解,请大家灵活掌握. 01 单个

python操作elasticsearch

Python Elasticsearch  api(官方文档) 安装Elasticsearch模块 pip install elasticsearch 添加数据 from elasticsearch import Elasticsearch # 默认host为localhost,port为9200.但也可以指定host与port es = Elasticsearch("http://localhost:9200") # 添加或更新数据,index,doc_type名称可以自定义,id可

Python操作Excel之数据提取

最近发现excel数据量极大,并且通过简单的数据操作不能提取到我需要的数据,如果单独操作,数据量太大耗时太长.想着通过简单的方式,并且快速提取数据,就想到了Python.python操作Excel使用的openyxl和pandas对Excel进行操作.代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020-02-24 下午 03:43 # @Author : Zhanxing # @Site : # @File : 提

python 往 elasticsearch 存入数据,然后通过kinaba 进行图形分析

es = Elasticsearch(hosts=[{'host': "elb-elasticsearch.cn-north-1.elb.amazonaws.com.cn", 'port': "9200"}], http_auth=("username", "password")) t = datetime.fromtimestamp(int(1529986664), pytz.timezone('Asia/Shanghai'

C++操作MySQL大量数据插入效率低下的解决方法

#include <iostream> #include <winsock2.h> #include <string> #include "mysql.h" #pragma comment(lib, "libmysql.lib"); using namespace std; int main() { MYSQL mysql; mysql_init(&mysql); // 初始化 MYSQL *ConnStatus = my

用python操作mysql数据库(之简单“插入数据”操作)

#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 1.这里的数据库环境为本地数据库 2.我要通过python操作的数据库是test_db 3.该数据库里有一个表,表名称:user 4.表字段:id.name.address 5.其中,id字段为自增,也是主键 6.因ID字段为自曾,所以在插入数据的时候会自己增加数字,所以在这里不用额外再插入数据 ''' import MySQLdb #建立连接 conn = MySQLdb.connect(hos

基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)

目录 1 准备工作 2 具体实施   1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用:提供string.list.set.zset.hash等数据结构的存储,并支持数据的备份. 本文适合使用的场景:当一个项目中Redis缓存的数据量逐渐增大,Redis缓存的数据占用内存也会越来越大,而且其中有很多很可能是价值不大的数据.由于Redis是一个key-value数据库,所以对其中的数