文章目录

  • 1、ES数据库和关系型数据库对比
  • 2、连接ES数据库
  • 3、插入数据
  • 4、查询数据
  • 建立连接池ES

1、ES数据库和关系型数据库对比

一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档使用 JSON 格式存储数据,包含了很多字段(列)

关系型数据库 数据库
ES 索引 类型 文档 字段

2、连接ES数据库

需要安装elasticsearch包

pip install elasticsearch
from elasticsearch import Elasticsearches = Elasticsearch([{"host":"ip","port":9200}])es.search(index='es_python')  # index:选择数据库

3、插入数据

1、创建索引(数据库)

"""索引名 es_python,ignore=400,表示忽视400这个错误,如果存在es_python时,会返回400"""
es.indices.create(index='es_python',ignore=400)

2、插入单条数据

body = {'name':'刘婵',"age":6,"sex":"male",'birthday':'1984-01-01',"salary":-12000}
es.index(index='es_python',doc_type='_doc',body=body)

3、插入多条数据

doc = [{'index':{'_index':'es_python','_type':'_doc','_id':1}},{'name':'赵云','age':25,'sex':'male','birthday':'1995-01-01','salary':8000},{'index':{'_index':'es_python','_type':'_doc','_id':2}},{'name':'张飞','age':24,'sex':'male','birthday':'1996-01-01','salary':8000},{'create':{'_index':'es_python','_type':'_doc','_id':3}},{'name':'关羽','age':23,'sex':'male','birthday':'1996-01-01','salary':8000},
]
es.bulk(index='es_python',doc_type='_doc',body=doc)

4、查询数据

1、body指定查询条件

body = {'from': 0,  # 从0开始'size': 2  # 取2个数据。类似mysql中的limit 0, 20。 注:size可以在es.search中指定,也可以在此指定,默认是10
}# 定义过滤字段,最终只显示此此段信息
filter_path=['hits.hits._source.ziduan1',  # 字段1'hits.hits._source.ziduan2']  # 字段2es.search(index='es_python', filter_path=filter_path, body=body)

2、模糊查询

body = {'query': {  # 查询命令'match': {  # 查询方法:模糊查询(会被分词)。比如此代码,会查到只包含:“我爱你”, “中国”的内容'name': '刘'}},'size': 20  # 不指定默认是10,最大值不超过10000(可以修改,但是同时会增加数据库压力)
}# size的另一种指定方法
es.search(index='es_python', filter_path=filter_path, body=body, size=200)

3、term,精准单值查询

# 注:此方法只能查询一个字段,且只能指定一个值。类似于mysql中的where ziduan='a'
body ={   'query':{'term':{'ziduan1.keyword': '刘婵'  # 查询内容等于“我爱你中国的”的数据。查询中文,在字段后面需要加上.keyword# 'ziduan2': 'liuchan'}}
}

4、terms,精准多值查询

#此方法只能查询一个字段,但可以同时指定多个值。类似于mysql中的where ziduan in (a, b,c...)
body ={   "query":{"terms":{"ziduan1.keyword": ["刘婵", "赵云"]  # 查询ziduan1="刘婵"或=赵云...的数据}}
}

5、multi_match,多字段查询

# 查询多个字段中都包含指定内容的数据
body = {"query":{"multi_match":{"query":"我爱你中国",  # 指定查询内容,注意:会被分词"fields":["ziduan1", "ziduan2"]  # 指定字段}}
}

6、prefix,前缀查询

body = {'query': {'prefix': { 'ziduan.keyword': '我爱你'  # 查询前缀是指定字符串的数据}}
}# 注:英文不需要加keyword

7、wildcard,通配符查询

body = {'query': {'wildcard': {'ziduan1.keyword': '?刘婵*'  # ?代表一个字符,*代表0个或多个字符}}
}
# 注:此方法只能查询单一格式的(都是英文字符串,或者都是汉语字符串)。两者混合不能查询出来。

8、regexp,正则匹配

body = {'query': {'regexp': {'ziduan1': 'W[0-9].+'   # 使用正则表达式查询}}
}

9、bool,多条件查询

# must:[] 各条件之间是and的关系
body = {"query":{"bool":{'must': [{"term":{'ziduan1.keyword': '我爱你中国'}},{'terms': {'ziduan2': ['I love', 'China']}}]}}}# should: [] 各条件之间是or的关系
body = {"query":{"bool":{'should': [{"term":{'ziduan1.keyword': '我爱你中国'}},{'terms': {'ziduan2': ['I love', 'China']}}]}}}# must_not:[]各条件都不满足
body = {"query":{"bool":{'must_not': [{"term":{'ziduan1.keyword': '我爱你中国'}},{'terms': {'ziduan2': ['I love', 'China']}}]}}}# bool嵌套bool
# ziduan1、ziduan2条件必须满足的前提下,ziduan3、ziduan4满足一个即可
body = {"query":{"bool":{"must":[{"term":{"ziduan1":"China"}},  #  多个条件并列  ,注意:must后面是[{}, {}],[]里面的每个条件外面有个{}{"term":{"ziduan2.keyword": '我爱你中国'}},{'bool': {'should': [{'term': {'ziduan3': 'Love'}},{'term': {'ziduan4': 'Like'}}]}}]}}
}

建立连接池ES

import os
import json
from datetime import datetime
from elasticsearch import Elasticsearch, RequestsHttpConnection
from elasticsearch import Transport
from elasticsearch.exceptions import NotFoundErrorclass ES(object):_index = ""_type = ""def __init__(self, hosts):# 基于requests实例化es连接池self.conn_pool = Transport(hosts=hosts, connection_class=RequestsHttpConnection).connection_pooldef get_conn(self):"""从连接池获取一个连接"""conn = self.conn_pool.get_connection()return conndef request(self, method, url, headers=None, params=None, body=None):"""想es服务器发送一个求情@method     请求方式@url        请求的绝对url  不包括域名@headers    请求头信息@params     请求的参数:dict@body       请求体:json对象(headers默认Content-Type为application/json)# return    返回体:python内置数据结构"""conn = self.get_conn()try:status, headers, body = conn.perform_request(method, url, headers=headers, params=params, body=body)except NotFoundError as e:return Noneif method == "HEAD":return statusreturn json.loads(body)def search(self, query=None, method="GET"):url = "/%s/%s/_search" % (self._index, self._type)if method == "GET":data = self.get(url, params=query)elif method == "POST":data = self.post(url, body=query)else:return Nonereturn datadef get(self, url, params=None, method="GET"):"""使用get请求访问es服务器"""data = self.request(method, url, params=params)return datadef put(self, url, body=None, method="PUT"):"""使用put请求访问es"""data = self.request(method, url, body=body)return datadef post(self, url, body=None, method="POST"):"""使用post请求访问服务器"""data = self.request(method, url, body=body)return datadef head(self, url, *args, **kwargs):status = self.request("HEAD", url, *args, **kwargs)return statusdef delete(self, url, *args, **kwargs):ret = self.request("DELETE", url, *args, **kwargs)return ret

python操作ES数据库相关推荐

  1. Python 操作es数据库

    #引入es库:from elasticsearch import Elasticsearch#链接到对应的es es = Elasticsearch(host = "192.168.1.1& ...

  2. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  3. Python操作Oracle数据库:cx_Oracle

    1 安装与导入 Python操作Oracle数据库多用cx_Oracle这个第三方扩展,总体而言,cx_Oracle的使用方式与Python操作MySQL数据库的pymysql库还是很相似的,如果还没 ...

  4. java连接mongodb_第78天: Python 操作 MongoDB 数据库介绍

    MongoDB 是一款面向文档型的 NoSQL 数据库,是一个基于分布式文件存储的开源的非关系型数据库系统,其内容是以 K/V 形式存储,结构不固定,它的字段值可以包含其他文档.数组和文档数组等.其采 ...

  5. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  6. Python操作mySql数据库封装类

    这是自己在做项目过程中,整理封装的操作mysql数据库封装类,自己可以修改下使用,节省大量时间. myGlobal.py # -*- coding: utf-8 -*-global globalLis ...

  7. python操作mysql数据库(增、删、改、查)_python对 MySQL 数据库进行增删改查的脚本...

    # -*- coding: utf-8 -*- import pymysql import xlrd # import codecs #连接数据库 conn = pymysql.connect(hos ...

  8. python 天气预报 mysql_python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库...

    前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 "test-mysql". Python 操作 ...

  9. python操作mysql中的表_带你了解什么是Python操作MySQL数据库

    写这篇文章主要是为了介绍Python操作MySQL数据库,并结合相应的实例带你更加深入了解.文中的代码实例很详细,对大家有一定的参考学习价值. 1.什么是pymysql? PyMySQL是在Pytho ...

最新文章

  1. 基于redhat的MyDNS搭建
  2. unity球体添加光源_Unity渲染路径——光源种类
  3. 3,SQL语句及数据库优化
  4. 【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
  5. MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用
  6. 数据库系统工程师考点分析
  7. mysql int类型的长度值
  8. windows快速打开命令窗口方式[利刃篇]
  9. 【Foreign】字串变化 [DP]
  10. 1017 A除以B (20 分)—PAT (Basic Level) Practice (中文)
  11. 【C009】ArcGIS VBA - 学习
  12. 解决下载了pygame后,pycharm依然报错No module named ‘pygame
  13. matlab tiff 压缩方式,无法打开以这种方式压缩的tiff文件(2) - imageJ / FIJI
  14. clickHouse 使用常见问题踩坑
  15. 9.2 博客和OJ——让代码积累看得见——《逆袭大学》连载
  16. 读文献——《Going deeper with convolutions》
  17. 13种MongoDB的GUI简介
  18. android 向上滑动home,滑动Home键
  19. 腾讯文档的表格设置行高
  20. Python 画玫瑰花

热门文章

  1. 关于邮件发送,只看这一篇就够了!!!
  2. idea常用设置之如何设置新建类自动生成@Author---File Header的设置
  3. 视频教程-人工智能-知识图谱实战案例视频-NLP
  4. LeetCode 171. Excel 表列序号
  5. mac电脑数据恢复?真正实用的方法(2023最新)
  6. Android空格占位符
  7. android4G多少钱,【OPPOReno安卓手机】OPPO Reno 4G手机【报价 价格 评测 怎么样】 -什么值得买...
  8. 强烈推荐30个让你人生开挂的心理学小技巧
  9. PCIe链路训练过程详解
  10. List集合(存放有序可重复队列)