总结使用python对于elasticsearch的常用操作

  1. 安装
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操作的更多相关文章

  1. Python 操作 ElasticSearch

    Python 操作 ElasticSearch 学习了:https://www.cnblogs.com/shaosks/p/7592229.html 官网:https://elasticsearch- ...

  2. python操作elasticsearch增、删、改、查

    最近接触了个新东西--es数据库 这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下 导入库from elasticsearch import Elastic ...

  3. elasticsearch之python备份

    一:elasticsearch原理 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功 ...

  4. python 操作 elasticsearch-7.0.2 遇到的问题

    错误一:TypeError: search() got an unexpected keyword argument 'doc_type',得到不预期外的参数 解决方法:elasticsearch7里 ...

  5. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  6. es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es

    今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...

  7. redis的数据操作和python操作redis+关系非关系数据库差异

    关系型数据库(RMDBS) 数据库中表与表的数据之间存在某种关联的内在关系,因为这种关系,所以我们称这种数据库为关系型数据库. 典型:Mysql/MariaDB.postgreSQL.Oracle.S ...

  8. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  9. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  10. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

随机推荐

  1. c程序设计语言 by K&R(五)UNIX系统接口

    一.文件描述符 在unix操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统的文件,因此,所有的输入.输出都要通过读/写文件来完成.也就是说,通过一个单一的接口就可以处理外围设备和程序之 ...

  2. Angular Material 18+ 高级教程 – Material Tooltip

    前言 一个常见的 Tooltip 使用场景是 当有 ellipsis 时,hover 显示全文. Tooltip 算是一种 Popover,我们之前有讲过,要搞 Popover 可以使用底层的 CDK ...

  3. ASP.NET Core – Partial View

    前言 之前写过一篇 ASP.NET Core – View Component 里面有提到, View Component 是 Partial View 的加强版. 多了一个 .cs 可以写逻辑. 那 ...

  4. 21 如何写出一篇高质量的sci水文

    博客配套视频链接: https://www.bilibili.com/video/BV1fW4y1W7dS/ b 站直接看 模型确定, 结果正在跑(或已结束), 目标期刊已定,一般可以定顶刊 从目标期 ...

  5. kali Linux及mac os 破解WiFi

    wpa-dictionary 用于 Wi-Fi 密码破解. Linux 篇(推荐) 1. 安装 aircrack-ng 使用相应包管理工具安装,例如 Debian/Ubuntu 使用 apt 安装: ...

  6. GE反射内存卡的指标和型号

    产品特性: • 1路发送,1路接收: • 光纤高速网络2.12GHz: • 最大256个节点: • 光纤协议不占用CPU资源: • 多模光纤节点距离300米:单模光纤节点距离10千米: • 板载128 ...

  7. 云原生周刊:Grafana Beyla 发布 | 2023.9.18

    开源项目推荐 Komiser Komiser 是一个与云无关的开源资源管理器.它与多个云提供商(包括 AWS.Azure.Civo.Digital Ocean.OCI.Linode.腾讯和 Scale ...

  8. 小A的组合数

    小A的组合数 题目描述 \(C_n^m\)表示组合,组合公式为:\(C_n^m=\frac{n!}{m!\times (n-m)!}\),请你求出\(C_n^m\)的因子个数\(tot\),由于大难会 ...

  9. Linux 7安装Mysql5.7版本

    Mysql 5.7的安装搭建 首先去到官方网站的下载链接中找到对应你Linux服务器版本的mysql软件包 https://dev.mysql.com/downloads/repo/yum/ 我使用的 ...

  10. 狂神说-Docker-学习笔记-01 Run的流程和Docker原理

    狂神说-Docker-学习笔记-01 Run的流程和Docker原理 视频链接:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 1.docker run ...