Elasticsearch上手——Python API的简单使用

原创 2017年02月01日 14:23:16

Python够直接,从它开始是个不错的选择。

Elasticsearch客户端列表:https://www.elastic.co/guide/en/elasticsearch/client/index.html
Python API:https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html
参考文档:http://elasticsearch-py.readthedocs.io/en/master/index.html

安装

我在CentOS 7上安装了Python3.6,安装时使用下面的命令:

pip3 install elasticsearch

安装时需要root权限

牛刀小试

由于Elasticsearch索引的文档是JSON形式,而MongoDB存储也是以JSON形式,因此这里选择通过MongoDB导出数据添加到Elasticsearch中。

使用MongoDB的Python API时,需要先安装pymongo,命令:pip3 install pymongo

import traceback
from pymongo import MongoClient
from elasticsearch import Elasticsearch

# 建立到MongoDB的连接
_db = MongoClient('mongodb://127.0.0.1:27017')['blog']

# 建立到Elasticsearch的连接
_es = Elasticsearch()

# 初始化索引的Mappings设置
_index_mappings = {
  "mappings": {
    "user": { 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" }  
      }
    },
    "blogpost": { 
      "properties": { 
        "title":    { "type": "text"  }, 
        "body":     { "type": "text"  }, 
        "user_id":  {
          "type":   "keyword" 
        },
        "created":  {
          "type":   "date"
        }
      }
    }
  }
}

# 如果索引不存在,则创建索引
if _es.indices.exists(index='blog_index') is not True:
  _es.indices.create(index='blog_index', body=_index_mappings) 

# 从MongoDB中查询数据,由于在Elasticsearch使用自动生成_id,因此从MongoDB查询
# 返回的结果中将_id去掉。
user_cursor = db.user.find({}, projection={'_id':False})
user_docs = [x for x in user_cursor]

# 记录处理的文档数
processed = 0
# 将查询出的文档添加到Elasticsearch中
for _doc in user_docs:
  try:
    # 将refresh设为true,使得添加的文档可以立即搜索到;
    # 默认为false,可能会导致下面的search没有结果
    _es.index(index='blog_index', doc_type='user', refresh=True, body=_doc)
    processed += 1
    print('Processed: ' + str(processed), flush=True)
  except:
    traceback.print_exc()

# 查询所有记录结果
print('Search all...',  flush=True)
_query_all = {
  'query': {
    'match_all': {}
  }
}
_searched = _es.search(index='blog_index', doc_type='user', body=_query_all)
print(_searched, flush=True)

# 输出查询到的结果
for hit in _searched['hits']['hits']:
  print(hit['_source'], flush=True)

# 查询姓名中包含jerry的记录
print('Search name contains jerry.', flush=True)
_query_name_contains = {
  'query': {
    'match': {
      'name': 'jerry'
    }
  }
}
_searched = _es.search(index='blog_index', doc_type='user', body=_query_name_contains)
print(_searched, flush=True)

运行上面的文件(elasticsearch_trial.py):

python3 elasticsearch_tria.py

可以得到下面的输出结果:

Processed: 1
Processed: 2
Processed: 3
Search all...
{'took': 1, 'timed_out': False, '_shards': {'total': 5, 'successful': 5, 'failed': 0}, 'hits': {'total': 3, 'max_score': 1.0, 'hits': [{'_index': 'blog_index', '_type': 'user', '_id': 'AVn4TrrVXvwnWPWhxu5q', '_score': 1.0, '_source': {'title': 'Manager', 'name': 'Trump Heat', 'age': 67}}, {'_index': 'blog_index', '_type': 'user', '_id': 'AVn4TrscXvwnWPWhxu5s', '_score': 1.0, '_source': {'title': 'Engineer', 'name': 'Tommy Hsu', 'age': 32}}, {'_index': 'blog_index', '_type': 'user', '_id': 'AVn4Trr2XvwnWPWhxu5r', '_score': 1.0, '_source': {'title': 'President', 'name': 'Jerry Jim', 'age': 21}}]}}
{'title': 'Manager', 'name': 'Trump Heat', 'age': 67}
{'title': 'Engineer', 'name': 'Tommy Hsu', 'age': 32}
{'title': 'President', 'name': 'Jerry Jim', 'age': 21}
Search name contains jerry.
{'took': 3, 'timed_out': False, '_shards': {'total': 5, 'successful': 5, 'failed': 0}, 'hits': {'total': 1, 'max_score': 0.25811607, 'hits': [{'_index': 'blog_index', '_type': 'user', '_id': 'AVn4Trr2XvwnWPWhxu5r', '_score': 0.25811607, '_source': {'title': 'President', 'name': 'Jerry Jim', 'age': 21}}]}}

这里写图片描述

版权声明:原创文章,欢迎转载,转载请注明出处和原文链接

Python ElasticSearch API

描述:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。下面介绍了利用Python API接口进行数据查询,方便...
  • u011587401
  • u011587401
  • 2017年08月22日 10:31
  • 686

5.7 Python API(for Elasticsearch)

5.7 Python API 原文链接  翻译:AbnerGong概述(Overview)正式的初级(low-level)客户端。它的目标是为了所有的Elasticsearch相关的Python代码提...
  • AbnerGong
  • AbnerGong
  • 2016年03月02日 01:04
  • 3318

Python Elasticsearch api

原文地址:http://www.cnblogs.com/letong/p/4749234.html 描述:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全...
  • feixuedongji
  • feixuedongji
  • 2016年02月15日 09:51
  • 1713

利用python调用elasticsearch-api来分析数据并作图进行日报邮件发送

公司最近上线了日志分析系统,每天都要给一些同事提供接口请求数据。方法比较笨,登录到kibana网站,找到画好的模板图,截图,发送给同事。 我觉得这种方式,我是要崩溃的。所以我下定决心,周末在家把这个...
  • qq_29069885
  • qq_29069885
  • 2017年06月25日 11:28
  • 906

python 访问 elasticsearch

 import pyes conn = pyes.ES(['127.0.0.1:9200'])#连接es def creat():     #conn.indices.create_i...
  • zgb40302
  • zgb40302
  • 2015年05月18日 15:28
  • 5460

Elasticsearch python API 文档Documentation 2.3.0 by Honza Král

文档来源:http://elasticsearch-py.rtfd.org/ 网站左侧提供PDF的下载1. Compatibility2. 安装与用法样例安装见:http://blog.csdn.n...
  • AbnerGong
  • AbnerGong
  • 2016年03月02日 14:42
  • 3500

python中使用elasticsearch做为搜索引擎

#coding:utf-8 import pyes conn = pyes.ES(['127.0.0.1:9200'])#连接es conn.create_index('test-index')...
  • zhuguorong11
  • zhuguorong11
  • 2016年10月20日 21:42
  • 1486

Elasticsearch介绍,单机安装,python 写Elasticsearch API

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引...
  • T_ells
  • T_ells
  • 2016年01月14日 17:02
  • 1733

基于Python操作ElasticSearch

环境依赖:  Python:2.7   ES依赖包:pyelasticsearch   ElasticSearch:5.5.1 / 6.0.1   操作系统:Windows 10 / CentO...
  • YHYR_YCY
  • YHYR_YCY
  • 2017年12月23日 20:31
  • 640

Python-ElasticSearch搜索

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索...
  • y472360651
  • y472360651
  • 2017年08月03日 22:47
  • 2310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Elasticsearch上手——Python API的简单使用
举报原因:
原因补充:

(最多只允许输入30个字)