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

这篇具有很好参考价值的文章主要介绍了ElasticSearch_dsl实现多字段查询去重过滤详解(script)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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.toymoban.com/news/detail-420851.html

到了这里,关于ElasticSearch_dsl实现多字段查询去重过滤详解(script)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch - DSL查询语法

    目录 DSL查询分类 全文检索查询 精确查询 地理查询 复合查询 相关性算分 算分函数查询 BooleanQuery DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询 常见的查询类型包括: 查询所有:查询出所有的数据,一般测试用;例如:match_all 全文检索(full text)查询

    2023年04月08日
    浏览(47)
  • 【ElasticSearch】DSL查询语法

    Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。官方文档: 其中,常见的查询类型有: 查询所有 :查询出所有数据,一般测试用。例如: 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: 精确查询 :根据精确

    2024年02月16日
    浏览(43)
  • 【Elasticsearch】DSL查询文档

    目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 1.5.2.算分函数查询 1)语法说明 2)示例 3)小

    2024年02月16日
    浏览(40)
  • 【MySQL】根据多个字段查询数据进行去重的sql编写

    一、实现思路 根据四个字段进行数据去重的SQL编写可以使用GROUP BY和HAVING子句来实现。 场景一: 假设有一个名为 table1 的数据表,其中包含四个字段: field1 、 field2 、 field3 和 field4 。要求根据这四个字段进行数据去重。 可以使用以下SQL语句: 场景二: 上述SQL语句会返回所

    2024年02月15日
    浏览(52)
  • Elasticsearch:人类语言到 Elasticsearch 查询 DSL

    Elasticsearch 为开发者提供了强大的搜索功能。Elasticsearch 使用 DSL 来进行查询。对于很多从关系数据库过来的人,这个很显然不很适应。虽然我们可以使用 SQL 来进行查询,但是我们必须通过一些命令来进行转换。我们可以通过阅读文章: Elasticsearch:Elasticsearch SQL介绍及实例

    2024年02月04日
    浏览(46)
  • 常用的Elasticsearch查询DSL

    1.基本查询 2.多条件查询 3.范围查询 4.复杂查询 5.聚合查询

    2024年02月12日
    浏览(47)
  • Elasticsearch实现对同一字段既能精准查询也能模糊查询

     使用@MultiField注解给字段取别名并设置为keyword类型 dao层如下 实体类如下 模糊查询测试如下: 可以看到模糊查询content中一共有3条数据有我这个分词  精准查询如下:  可以看到精准查询就只有一条结果,符合精准查询。 注意:该方法需要版本支持,具体版本未知,但是在

    2024年02月02日
    浏览(44)
  • ElasticSearch——DSL查询及结果处理

    常见的查询类型包括: 查询类型 描述 查询所有 查询出所有数据 例如:match_all 全文检索查询 利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match 、 multi_match 精确查询 根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:id

    2024年02月06日
    浏览(40)
  • ElasticSearch级查询Query DSL上

    目录 ES高级查询Query DSL match_all 返回源数据_source 返回指定条数size 分页查询fromsize 指定字段排序sort 术语级别查询 Term query术语查询 Terms Query多术语查询 exists query ids query range query范围查询 prefix query前缀查询 wildcard query通配符查询 fuzzy query模糊查询        ES中提供了一种强大

    2024年02月20日
    浏览(56)
  • ElasticSearch Index查询(Query DSL)

    先贴一个Query DSL的官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 我平时喜欢查看官方文档,了解数据查询和存储方面的性能优化点,下面是积累的脚本分享。 查询语句格式 查询类型:match_all,match,term,range,fuzzy,bool 等等 查询条件:查询条件会根

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包