elasticsearch之python操作
总结使用python对于elasticsearch的常用操作
- 安装
pip install elasticsearch
2. 连接
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host':'49.232.6.227' , 'port':9200}], timeout=3600)
# 添加验证
# http_auth=('xiao', '123456')
es = Elasticsearch([{'host':'49.232.6.227' , 'port':9200}], http_auth=http_auth, timeout=3600)
3. 查询
1)全部查询
query = {
'query': {
'match_all': {}
}
}
result = es.search(index=account_index, body=query)
for row in result['hits']['hits']:
print(row)
2)term 过滤--term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经切词的文本数据类型)
query = {
"query": {
"term":{
'age': 32
}
}
}
result = es.search(index="megacorp", body=query)
print(result)
# first_name 可能经过切词了
query = {
"query": {
"term":{
'first_name': 'Jane'
}
}
}
result = es.search(index="megacorp", body=query)
print(result)
3)terms 过滤--terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配
query = {
'query': {
'terms': {
'name': ['111111', '22222']
}
}
}
4) 查询文档中是否某个字段
query = {
'query': {
'exists': {
'field': 'age'
}
}
}
5) 布尔值
- bool 过滤--合并多个过滤条件查询结果的布尔逻辑
- must :: 多个查询条件的完全匹配,相当于 and。
- must_not :: 多个查询条件的相反匹配,相当于 not。
- should :: 至少有一个查询条件匹配, 相当于 or。
query = {
'query': {
'bool': {
'must': {
'term': {"_score": 1.0},
'term': {'name': 'lanlang'}
}
}
}
}
# 匹配name为lanlang 并且没有age字段的记录
query = {
'query': {
'bool': {
'must': {
'term': {
'name': 'lanlang'
}
},
'must_not': {
'exists': {
'field': 'age'
}
}
}
}
}
6) 范围查找
- gt : 大于
- gte : 大于等于
- lt : 小于
- lte : 小于等于
query = {
'query': {
'range': {
'age': {
'lt': 10
}
}
}
}
7)match标准查询
# 做精确匹配搜索时,你最好用过滤语句,因为过滤语句可以缓存数据。
# match查询只能就指定某个确切字段某个确切的值进行搜索,而你要做的就是为它指定正确的字段名以避免语法错误。
query = {
"query": {
"match": {
"about": "rock"
}
}
}
8)multi_match 查询--match查询的基础上同时搜索多个字段,在多个字段中同时查一个
query = {
'query': {
'multi_match': {
'query': 'lanlang',
'fields': ['name','wife']
}
}
}
9 )wildcards 查询--使用标准的shell通配符查询
query = {
'query': {
'wildcard': {
'name': 'lan*'
}
}
}
10 )regexp查询
query = {
"query": {
"regexp": {
"about": ".a.*"
}
}
}
11)prefix 以什么开头
query = {
'query': {
'prefix': {
'name': 'lan'
}
}
}
12)短语匹配(Phrase Matching) -- 寻找邻近的几个单词
query = {
"query": {
"match_phrase": {
"about": "I love"
}
}
}
13)统计查询
query = {
"query": {
"match_phrase": {
"about": "I love"
}
}
}
result = es.count(index="megacorp", body=query)
{'count': 4, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}}
4. 插入数据
1)不指定ID
# body = {
# 'name': 'xing',
# 'age': 9,
# 'sex': 0,
# 'wife': 'maomao'
# }
# result = es.index(index=account_index, body=body)
2)指定ID
es.index(index="megacorp",id=4,body={"first_name":"xiao","last_name":"wu", 'age': 66, 'about': 'I love to go rock climbing', 'interests': ['sleep', 'eat']})
5. 删除数据
1)指定ID删除
id = '5DhJUHEBChSA6Z-1wbVW' ret = es.delete(index=account_index, id=id)
2)根据查询条件删除
query = {
"query": {
"match": {
"first_name": "xiao"
}
}
}
result = es.delete_by_query(index="megacorp", body=query)
6. 更新
1)指定ID更新
id = '5ThEVXEBChSA6Z-1OrVA'
# 删除字段
doc_body = {
'script': 'ctx._source.remove("wife")'
} ret = es.update(index=account_index, id=id, body=doc_body)
print(ret)
# 增加字段
doc_body = {
'script': "ctx._source.address = '合肥'"
}
# 修改部分字段
doc_body = {
'doc': {'name': 'xing111'}
}
2)满足条件进行更新
query = {
"query": {
"match": {
"last_name": "xiao"
}
},
"script":{
"source": "ctx._source.last_name = params.name;ctx._source.age = params.age",
"lang": "painless",
"params" : {
"name" : "wang",
"age": 100,
},
}
}
result = es.update_by_query(index="megacorp", body=query)
elasticsearch之python操作的更多相关文章
- Python 操作 ElasticSearch
Python 操作 ElasticSearch 学习了:https://www.cnblogs.com/shaosks/p/7592229.html 官网:https://elasticsearch- ...
- python操作elasticsearch增、删、改、查
最近接触了个新东西--es数据库 这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下 导入库from elasticsearch import Elastic ...
- elasticsearch之python备份
一:elasticsearch原理 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功 ...
- python 操作 elasticsearch-7.0.2 遇到的问题
错误一:TypeError: search() got an unexpected keyword argument 'doc_type',得到不预期外的参数 解决方法:elasticsearch7里 ...
- Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查
今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...
- es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es
今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...
- redis的数据操作和python操作redis+关系非关系数据库差异
关系型数据库(RMDBS) 数据库中表与表的数据之间存在某种关联的内在关系,因为这种关系,所以我们称这种数据库为关系型数据库. 典型:Mysql/MariaDB.postgreSQL.Oracle.S ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
随机推荐
- 小tips:前端容易读错的单词列表
排名第一的是width,音标/wɪdθ/,发/i/的音,不是发/ai/的音: hidden音标/ˈhɪdn/发/i/的音,不是发/ai/的音: hide音标/haɪd/,发/ai/的音: float音 ...
- Qml 实现水波进度动画条
[写在前面] 最近看到一个非常有趣的动画效果:水波进度动画. 学习了一下实现思路,觉得很有意思. 不过原版是 HTML + CSS,我这里用的是 Qml,有一些小技巧,分享给大家~ [正文开始] 老样 ...
- 实用技巧:根据menuconfig定位一个驱动涉及到的源文件
根据menuconfig定位一个驱动涉及到的源文件,这个是很常用的,因为有时候你需要参考别人的驱动代码.新手不知道如何定位驱动相关源码,这篇文章将告之. 假设我手头有一块开发板,现在我想要获取板载ov ...
- 我的网站集成ElasticSearch初体验
最近,我给我的网站(https://www.xiandanplay.com/)尝试集成了一下es来实现我的一个搜索功能,因为这个是我第一次了解运用elastic,所以如果有不对的地方,大家可以指出来, ...
- 从浏览器输入url到回车发生了什么
1. 域名解析,即把域名解析成以为唯一的ip ps:ip是每个网站的对应的一个key,域名是为了语义化,方便使用而设计的 : ps:第一次域名解析需要花费较长的时间,所以一般第一次解析就会把DNS解析 ...
- 虚拟dom的优缺点
虚拟dom 是js模拟的一颗dom树,也是 js 对象 : 虚拟dom 时相对于 真实dom而言的,操作真实 dom 开销太大,降低了性能,所以使用 虚拟 dom 替代真实 dom 完成操作和计算功能 ...
- 一个查询IP地理信息和CDN提供商的离线终端工具
一个查询IP地理信息和CDN提供商的离线终端工具 Nali 功能 支持多种数据库 纯真 IPv4 离线数据库 ZX IPv6 离线数据库 Geoip2 城市数据库 (可选) IPIP 数据库 (可选) ...
- 多校A层冲刺NOIP2024模拟赛04
T1.02表示法 竟然有出题人敢出高精度(其实只是一个把string转成01串),开场看出记搜后十分犹豫到底要不要写高精,徘徊很久还是写了个小高精. 码( /* GGrun */ #include&l ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0 发布 | 2023.03.03-03.16
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- docker实战: vue+java+uniapp部署到阿里云服务器详解(此文没有使用宝塔面板部署),附带各种坑处理
一.部署前准备工具以及注意事项: 项目来源:https://gitee.com/ZhongBangKeJi/crmeb_java?_from=gitee_search 官方部署文档:https://d ...