ElasticSearch_dsl实现多字段查询去重过滤详解(script)

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 ElasticSearch_dsl实现多字段查询去重过滤详解(script),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

ElasticSearch单字段去重详见博文:ElasticSearch单字段查询去重详解_IT之一小佬的博客-CSDN博客

ElasticSearch多字段去重详见博文:ElasticSearch多字段查询去重过滤详解_IT之一小佬的博客-CSDN博客

本博文将详细介绍使用elasticsearch_dsl进行多字段进行去重。本文示例数据详见上文单字段博文数据。

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

1、对条件进行查询

示例代码:

from elasticsearch_dsl import connections, Search, A, Q

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
res = s.query(q)
for data in res:
    print(data.to_dict())

print("共查到%d条数据" % res.count())

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

2、使用script_fields脚本多字段去重

示例代码:

from elasticsearch_dsl import connections, Search, Q

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
# res = s.query(q).script_fields(age_gender_aggs={'script': {'lang': 'painless', 'source': "doc['age'].value + doc['gender'].value"}})
res = s.query(q).script_fields(age_gender_aggs={'script': {'lang': 'painless', 'source': "'age:' + doc['age'].value + ',gender:' + doc['gender'].value"}})

count = 0
for data in res:
    print(data.to_dict(), type(data.to_dict()))
    count += 1
print("共查到%d条数据" % count)

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

3、使用script_fields脚本多字段去重并显示需要的字段

示例代码:

from elasticsearch_dsl import connections, Search, Q

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
res = s.query(q)\
    .script_fields(age_gender_aggs={'script': {'lang': 'painless', 'source': "'age:' + doc['age'].value + ',gender:' + doc['gender'].value"}})\
    .source(['name', 'age', 'gender', 'address'])

count = 0
for data in res:
    print(data.to_dict(), type(data.to_dict()))
    count += 1
print("共查到%d条数据" % count)

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

4、使用script_fields脚本多字段去重并显示所有字段

示例代码:

from elasticsearch_dsl import connections, Search, Q

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
res = s.query(q)\
    .script_fields(age_gender_aggs={'script': {'lang': 'painless', 'source': "'age:' + doc['age'].value + ',gender:' + doc['gender'].value"}})\
    .source([])\
    .execute()  # 这一行可写可不写

count = 0
for data in res:
    print(data.to_dict(), type(data.to_dict()))
    count += 1
print("共查到%d条数据" % count)

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

5、使用script_fields脚本多字段去重统计数量

示例代码:

from elasticsearch_dsl import connections, Search, Q

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
res = s.query(q).script_fields(age_gender_aggs={'script': {'lang': 'painless', 'source': "doc['age'].value + doc['gender'].value"}})

lst = []
for data in res:
    print(data.to_dict(), type(data.to_dict()))
    lst.append(str(data.to_dict()))
print(set(lst))
print("共查到%d条数据" % len(set(lst)))

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

6、使用聚合中script脚本多字段去重统计数量

示例代码:

from elasticsearch_dsl import connections, Search, Q, A

# 连接es
es = connections.create_connection(hosts=['192.168.124.49:9200'], timeout=20)
print(es)

s = Search(using=es, index='person_info')
q = Q('match', provience='北京')
search = s.query(q)
search.aggs.bucket('age_gender_agg',
                   A('cardinality', script={'lang': 'painless', 'source': "doc['age'].value + doc['gender'].value"}))
ret = search.execute()
print(ret)
print(ret.aggregations.age_gender_agg)
print(ret.aggregations.age_gender_agg.value)

运行结果:

ElasticSearch_dsl实现多字段查询去重过滤详解(script)

参考博文:

Retrieve selected fields from a search | Elasticsearch Guide [8.5] | Elastic

API Documentation — Elasticsearch DSL 7.2.0 documentation

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/142824.html

(0)

相关推荐

  • DRF过滤排序分页

    命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

    导读:本篇文章讲解 DRF过滤排序分页,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年5月24日
    00
  • 安装mingw+Theano+keras(多警告、错误解决办法)

    导读:本篇文章讲解 安装mingw+Theano+keras(多警告、错误解决办法),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端笔记 2023年2月26日
    00
  • hadoop配置使用到的脚本

    勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

    导读:本篇文章讲解 hadoop配置使用到的脚本,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月26日
    00
  • Cookie 和 Session、实现用户登录逻辑

    导读:本篇文章讲解 Cookie 和 Session、实现用户登录逻辑,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端笔记 2023年2月24日
    00
  • Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据

    勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

    导读:本篇文章讲解 Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月26日
    00
  • 【SpringBoot系列】最详细demo– 声明式事务

    人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

    导读:本篇文章讲解 【SpringBoot系列】最详细demo– 声明式事务,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年3月8日
    00
  • Springboot中mybatis踩坑解决方案

    书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。

    导读:本篇文章讲解 Springboot中mybatis踩坑解决方案,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年3月4日
    00
  • 【LeetCode】20. 有效的括号 – Go 语言题解

    导读:本篇文章讲解 【LeetCode】20. 有效的括号 – Go 语言题解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年2月26日
    00
  • 由于找不到MSVCP140D_APP.dll或VCRUNTIME140D_APP.dll,无法继续执行代码,重新安装程序可能解决问题。一种可能的解决方案

    追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

    导读:本篇文章讲解 由于找不到MSVCP140D_APP.dll或VCRUNTIME140D_APP.dll,无法继续执行代码,重新安装程序可能解决问题。一种可能的解决方案,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月6日
    00
  • 【VMware】搭建个人服务器

    命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

    导读:本篇文章讲解 【VMware】搭建个人服务器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年5月24日
    00

发表回复

登录后才能评论