博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch上手——Python API的简单使用
阅读量:5965 次
发布时间:2019-06-19

本文共 3436 字,大约阅读时间需要 11 分钟。

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

Elasticsearch客户端列表:

Python API:
参考文档:

安装

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

pip3 install elasticsearch

安装时需要root权限

牛刀小试

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

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

import tracebackfrom pymongo import MongoClientfrom 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: 1Processed: 2Processed: 3Search 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}}]}}

这里写图片描述

你可能感兴趣的文章
HDU--2040
查看>>
zepto返回顶部动画
查看>>
CVBS视频信号解析
查看>>
必要时进行保护性拷贝
查看>>
Codeforces Round #356 (Div. 1) D. Bear and Chase 暴力
查看>>
甲骨文Java Archive
查看>>
查看数据库错误日志的位置
查看>>
电信网络拓扑图自动布局
查看>>
C#中List〈string〉和string[]数组之间的相互转换
查看>>
洛谷P1108 低价购买[DP | LIS方案数]
查看>>
通达信里的统计函数及区块背景函数
查看>>
redis主从配置<转>
查看>>
8 行 Node.js 代码实现代理服务器
查看>>
水印,图片验证码
查看>>
C#编程(七十六)----------使用指针实现基于栈的高性能数组
查看>>
PostgreSql 分页limit
查看>>
在MySQL中创建cm-hive使用的数据库及账号
查看>>
linux下限制ip访问
查看>>
linux添加环境变量
查看>>
Dumpsys Input Diagnostics
查看>>