python操作es条件查询定制body

article/2025/7/9 2:06:18

参考连接:

python操作elasticsearch - 无量python - 博客园

1、切片查询

from elasticsearch import Elasticsearch# 建立连接
es = Elasticsearch( hosts={'192.168.0.120', '192.168.0.153'},  # 地址timeout=3600  # 超时时间
)# body指定查询条件
body = {'from': 0,  # 从0开始'size': 20  # 取20个数据。类似mysql中的limit 0, 20。 注:size可以在es.search中指定,也可以在此指定,默认是10
}# 定义过滤字段,最终只显示此此段信息
filter_path=['hits.hits._source.ziduan1',  # 字段1'hits.hits._source.ziduan2']  # 字段2es.search(index='pv23', filter_path=filter_path, body=body)  # 指定查询条件

2、match,模糊查询

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

3、match_phrase,模糊查询

body = {'query': {  # 查询命令'match_phrase': {  # 查询方法:模糊查询(不会被分词)。会查到包含:“我爱你中国”的内容'ziduan1': '我爱你中国'}}
}# 注:内容中的下划线,等标点符号会被忽略,有与没有的效果一样

4、term,精准单值查询

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

5、terms,精准多值查询

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

 6、multi_match,多字段查询

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

7、prefix,前缀查询

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

8、wildcard,通配符查询

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

9、regexp,正则查询

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

10、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'}}]}}]}}
}

11、exists,存在字段查询

body = {'query': {'exists': {'field': 'ziduan1'}  # 查询存在ziduan1的数据}
}# exists、bool嵌套查询
# 存在ziduan1的情况下,ziduan2的值必须为指定字段
body = {"query":{"bool":{"must":[{'exists': {'field': 'ziduan1'}},{"term":{"ziduan2.keyword": '我爱你中国'}},]}}
}

12、大于小于查询

body = {"query": {"range": {"ziduan1":{"gte": 3,  # 大于"lt": 20  # 小于}}}}

 13、nest,json数据查询

body = {'query': {'nested': {'path': 'ziduan1',  # 指定json数据的字段'query': {  # 指定查询方式'term': {'ziduan1.ziduan2': '我爱你中国'}  # 根据ziduan1里面的ziduan2数据查询}}}
}# nest、bool嵌套查询
body = {'query': {'bool': {'must': [{'term':{"ziduan3" : "I love China"}},{'nested': {  # json查询'path': 'ziduan1','query': {  # 指定查询方式'term': {'ziduan1.ziduan2': '我爱你中国'}  # 根据ziduan1里面的ziduan2数据查询}}}]}}
}

14、排序

body = {"query":{  # 指定条件,可以使用以上的任何条件等查询数据。然后再对符合条件的数据进行排序"match_all":{}},"sort":{  # 对满足条件的数据排序"age":{                 # 根据age字段排序"order":"asc"       # asc升序,desc降序}}
}# 多字段排序,注意顺序!写在前面的优先排序
body = {"query":{"match_all":{}},"sort":[{"age":{"order":"asc"      # 先根据age升序}},{"name":{               # 后根据name字段升序排序"order":"asc"      # asc升序,desc降序}}],
}

15、scroll,翻页查询(数据量小可以使用此方法,数据量大推荐使用search_after方法--见下一个方法)

body={'query':{'match_all': {}},'sort': {'zidan6': 'asc'},  # 翻页需要先使用sort排序,与search_after类似
}# size:设置一页数据量
result = es.search(index='pv91', scroll='1m', size=5, body=body)
# 获取总的数据量,用于得到总的数据页数
total = result['hits']['total']
# 获取初始翻页id
scrid = result['_scroll_id']
# 第一页的数据
result = es.search(index='patent_cn_v71',size=5, body=body, filter_path=['hits.hits._source.ziduan1', 'hits.hits._source.ziduan2.ziduan2_1'])# 开始翻页
for i in range(5):  #翻5页print(result, '\n')print('*' * 50, '第{}页'.format(i), '*' * 50)result = es.scroll(scroll_id=scrid, scroll='1m', filter_path=['hits.hits._source.ziduan1', 'hits.hits._source.ziduan2.ziduan2_1'])

16、search_after,翻页查找(推荐此方法)

content_size = 3000  # 设置一页的数据量
size_cont = content_size
next_id = 0  # 初始化next_id,每次循环是从  此数据 之后的第1个数据开始
while size_cont == content_size:body = {"query": {"range": {"update_time":{"gte": "2019-10-14"}}},'sort': {'ziduan2': 'asc'},  # 以ziduan2为next_id,需要先对其进行排序'search_after': [next_id],  # 从此数据之后的第1个数据开始,但不包含此数据'size': content_size  # 指定当前页数据量}filter_path = ['hits.hits._source.ziduan1','hits.hits._source.ziduan2']rt = es.search(index='pv1', body=body, filter_path=filter_path)['hits']['hits']size_cont = len(rt)  # 更新循环条件:若数据量不等于指定的数据量,说明遍历到最后的一页数据了for result in rt:try:app_date = result['_source']['ziduan1']except:continuetry:ziduan2 = result['_source']['ziduan2']next_id = ziduan2  # 更新next_idexcept:app_text = ''

17、聚合查询

# 统计符合条件的指定字段的数据中,各数据的个数body = {
#     'query': {
#         'match_all': {}
#     },'size': 0,  # 设置0为条件查询后的数据显示条数,默认显示10条'aggs':{'num_ipcr': {  # 自定义buckets'terms': {'field': 'ziduan1',  # 需要查找的字段'size': 10,  # 设置聚合数据显示条数}}},
}# 嵌套聚合:根据聚合后的数据大小再进行聚合
body = {'size': 0,  # 设置0为条件查询后的数据显示条数,默认显示10条"aggs": {"agroup": {"nested": {"path": "ziduan1"},  # 选择ziduan1里面的数据量再进行聚合"aggs": {"de_inventor": {"terms": {"field": "ziduan1.ziduan1_1.keyword", "size": 200000}}},},},
}# 去重统计
body = {'size': 0, 'aggs': {'discount_ipcr': {'cardinality':{  # 去重统计'field': 'ziduan1','precision_threshold': 100 # 保证100个以内准确率接近100%,每个类别会占用100字节的内存},},}
}
# 结果返回值说明
"""
doc_count_error_upper_bound: 表示没有在这次聚合中返回、但是可能存在的潜在聚合结果
sum_other_doc_count:表示这次聚合中没有统计到的文档数
buckets:聚合结果,默认由高到低排列。key表示聚合元素的值,doc_count表示元素出现的次数。注意,这里的doc_count也是不准确的
"""

四、建立es数据

es.indices.create(index='my-index', ignore=400)  # 建立索引(理解为数据库,就是es.search(index='')查找时候用到的index)
es.index(index="my-index", id=0, body={'name': 'jaychou', "age": 30, "sex": 'male'})  # 插入数据:id是唯一标识,body里面是字段以及对应的数据


http://chatgpt.dhexx.cn/article/xDxGK2I5.shtml

相关文章

Oracle clob怎么存储超过4000长度的数据,你了解吗

目录 方式一、使用存储过程: 方式二、使用to_clob函数 方式三、mybatis中的方法 附: oracle将把varchar2字段(长度4000)改为clob类型 参考资料: 题记:我们知道Oracle存储的字段长度是有限制&#xff0…

oracle中clob和blob,Oracle中的BLOB和CLOB

非洲小白脸 阅读(364) 评论(0) 编辑 收藏 所属分类: oracle Oracle中的BLOB和CLOB 一、区别和定义 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单…

mysql clob blob_Oracle中 CLOB, BLOB和NLOB

SQL 类型 CLOB 在 Java TM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CL…

java clob 操作_Java Clob 操作

java操作数据库clob字段的简单例子: package com.test.db.clob; import java.io.BufferedReader; import java.io.IOException; import java.io.Writer; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar…

ORACLE中CLOB介绍及使用

一、Oracle中的varchar2类型 我们在Oracle数据库存储的字符数据一般是用VARCHAR2。VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同。 在Oracle Database中,VARCHAR2 字段类型&#xf…

clob类型(数据库clob类型)

如何获取clob类型的字节长度 blob和clob最大是多少?还是没有最大限制?它们的最大上限就是4G,Clob可以存储单字节字符数据,Blob可以存储无结构的二进制数据 Oracle中Clob类型如何处理? string id Guid。NewGuid()。ToS…

CRC校验方法的实现

1,确定收发双方所使用的校验位数(由收发双方自定义) 如1个字节的为CRC-8校验,2字节为CRC-16校验,4字节为CRC-32校验。 2,确定除数(生成多项式) 根据校验字节数,确定某个除数G(x),这个除数一般以二进制形式…

【Verilog】CRC校验码生成器原理及verilog实现

目录 一、CRC的基本原理 二、CRC生成步骤 2.1举个栗子 三、Verilog实现 四、参考资料 4.1 CRC在线计算器 一、CRC的基本原理 CRC :Cyclic Redundancy Check循环冗余校验码 将被处理的报文比特序列当做一个二进制多项式A(x)的系数,任意一个由二进制…

CRC校验原理及其使用

目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 如何进行CRC校验 校验标准式是什么玩意? 常见的CRC校验 CRC校验计算过程 CRC校验代码参考 代码解读 生成CRC8校验表的代码 CRC检验网站 如何…

FPGA校验(2):CRC校验

CRC:输入序列对某个表达式求余数,或者认为一系列数据求异或的过程。 CRC校验 CRC原理 CRC实现非常简单,但想要真正掌握CRC算法原理,就必须清楚地了解有限域的运算规则,知道CRC就是有限域中的除法余数,并且清楚如何将串…

crc校验c语言程序,C语言:CRC校验

一、CRC码 CRC:Cylic Reduancy check译作汉语就是循环冗余校验码。 二、XOR XOR:逻辑运算符异或,不知道用符号怎么写,总之其运算法则是,不同为1,相同为0。 三、用XOR代替算术运算上除法的两个例子。 1、10110010000/11001 第一次异或(相除),得到商为1,余数为1111,加入…

【Verilog】CRC 校验(二)用 Verilog 实现生成 CRC 校验码

目录 实验任务 CRC 生成 Verilog 实现 电路生成原理 模块设计图 CRC 生成时序图 具体代码实现 上板验证 实验任务 在上一篇介绍了 CRC 校验码的原理,如何计算 CRC 校验码,这篇介绍如何利用 Verilog 实现CRC 校验码的生成。 什么是 CRC 校验码&a…

CRC校验 - 基于FPGA的实现

CRC校验 - 基于FPGA的实现 0 背景 CRC即循环冗余校验:常用于数据通信领域中,通常由发送端添加校验码于单帧数据的尾部,并由接受方进行提取和校验该帧数据传输是否正确。 循环冗余检查(CRC)是一种数据传输检错功能&am…

CRC校验的原理及实现方法

一、CRC校验介绍 循环冗余校验码(CRC),是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。循环冗余校验是通过某种数学运算来建立数据位和校验位的约定…

C#编程,CRC校验原理

1.CRC简介 CRC全称循环冗余校验(Cyclic Redundancy Check, CRC),是通信领域数据传输技术中常用的检错方法,用于保证数据传输的可靠性。网上有关这方面的博客和资料很多,本文尽量简洁的梳理一下它的原理。后面还会结合自己的实践经…

LabVIEW实现CRC校验

目录 1、内部控件计算CRC校验 2、公式节点计算CRC校验 CRC(循环冗余校验),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除…

CRC校验及C语言实现

摘自:CRC校验原理及其C语言实现 地址:https://blog.csdn.net/whik1194/article/details/108837493?spm1001.2014.3001.5502 目录 什么是校验算法CRC算法简介CRC参数模型CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结 什么是校验算法 最近的工作中&…

SwitchHosts

SwitchHosts 官网:https://oldj.github.io/SwitchHosts/ 客户端支持 WindowsLinuxMac 功能支持 快速切换Hosts在线 hosts 方案Chrome浏览器Hosts实时生效 v3.3.12后将被支持,可暂时下载 https://github.com/CloverNet/SwitchHosts

Host服务

这也是看网上的例子自己跟着配置做的一个小demo,这里记录一下。 一、创建一个空的控制台应用程序 二、安装所需dll  1.Quartz     Install-Package Quartz -Version 2.3.3  2.Owin    Install-Package Owin -Version 1.0.0(这个暂时装上&…

Go get http 服务

阅读目录 package mainimport ("encoding/json""fmt""net/http" )type MirageIPResponse struct {Code string json:"code"MirageIP string json:"MirageIp" }func main() {// 定义处理函数handler : func(w http.Respo…