Python语言,ES(Elasticsearch)基础查询

这篇具有很好参考价值的文章主要介绍了Python语言,ES(Elasticsearch)基础查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

# 有版本匹配的问题,可能需要安装指定版本。 对应7.X的ES, 我安装的是Elasticsearch=7.13.0的版本
from elasticsearch import Elasticsearch
es = Elasticsearch(["http://IP:port/"])

# 查询所有数据
body1 = {
    "query":{
        "match_all": {}
    }
}

# 等于查询,term: 查询 XX = “xx”,关键词不会被拆分。注意:如果字段值是字符串(尤其是汉字),字段名称后面最好加上“.keyword”进行全匹配,要不然可能查不到(可能是分词的原因)
body2 = {
    "query": {
        "term": {
            "数据库字段": "weixin"
        }
    },
    "size":"5",   # 指定查询多少条
}

# 等于查询,terms: 查询 xx = “xx” 或 xx = “yy”
body3 = {
    "query":{
        "terms":{
            "author.keyword": [
                "关键词1", "关键词2"
            ]
        }
    }
}

# 包含查询,match:匹配author字段包含"XXXX"关键字的数据,关键词分词后再去查询。
# 注意:加上".keyword"是精确查询(完全匹配),如果不加,匹配一个字(分词)就算匹配了
body4 = {
    "query": {
        "match": {
            "author.keyword": "XXXX"
        }
    }
}

# 包含查询,multi_match: 在author和title字段里匹配包含“新华”关键字的数据。
body5 = {
    "query": {
        "multi_match": {
            "query": "新华",
            "fields": ["author.keyword", "title"]
        }
    }
}

# 复合查询bool
# bool有3类查询关系:
# must(都满足)
# should(没有must和filter时,其中一个满足;如果有must,可以用"minimum_should_match"指定最少满足的条件个数),
# must_not(都不满足),即bool查询必须有这些关系词。
# 查询关系(must)后面用[]包裹多个查询条件,每个查询条件用{}括起来,每个查询条件用“,”分开
body6 = {
    "query":{
        "bool":{
            "must":[
                {
                    "term":{
                        "author.keyword":"财经"
                    }
                },
                {
                    "term":{
                        "字段名":"3"
                    }
                }
            ]
        }
    }
}

# 范围查询,"range"可以放到复合查询里,"bool":{"must":[{"range":{"XXTime":{"gte":1649952000000,"lt":1650038400000}}}]}
body7 = {
    "query":{
        "range":{
            "createdTime":{
                "gte":1649952000000,       # >= 大于等于
                "lt":1650038400000        # < 小于
            }
        }
    }
}

# 通配符查询
body8 = {
    "query":{
        "wildcard":{
            "title":"zh*"
        }
    }
}
# 前缀查询
body9 = {
    "query":{
        "prefix":{
            "title":"zh"
        }
    }
}
# 排序 可以多字段排序,"sort":[{"field1":{"order":"asc"}},{"field2":{"order":"desc"}}]
# 注意顺序!写在前面的优先排序
# 注意,如果是字符串(test)类型,需要修改属性开启fielddata, fielddata非常耗费资源,不建议用,最好是查询结果保存进行后处理。
body10 = {
    "query":{
        "range":{
            "你的字段名":{
                "gte": 0,       # >= 大于等于
                "lt": 0.15,        # < 小于
            }
        }
    },
    "sort":{
        "你的字段名":{                 # 根据字段升序排序
            "order":"asc"       # asc升序,desc降序
        }
    }
}

# 开启fielddata方法,POST /(你的索引名称)/_mapping,如下body没有验证,不敢修字段属性。(基于python的elasticsearch库,怎么设置属性,不清楚)
body_only_know = {   # 此body 仅限于了解
    "properties": {
        "你的字段名": {
            "type": "text",
            "fielddata": True
        }
    }
}

# 聚合,获取最小值。聚合也是要数字类型,如果是text需要修改字段属性"fielddata": True,才能排序或聚合(不敢修改)
body11 = {
    "query":{
        "range":{
            "你的字段名":{
                "gte": 0,          # >= 大于等于
                "lt": 0.15,        # < 小于
            }
        }
    },
    "aggs":{                               # 聚合查询
        "min_你的字段名":{                  # 最小值的key
            "min":{                        # 最小
                "field":"你的字段名"       # 查询最小值
            }
        }
    }
}

# 聚合,获取最大值
body12 = {
    "query":{
        "range":{
            "你的字段名":{
                "gte": 0,          # >= 大于等于
                "lt": 0.15,        # < 小于
            }
        }
    },
    "aggs":{                               # 聚合查询
        "max_你的字段名":{                 # 最小值的key
            "max":{                        # 最小
                "field":"你的字段名"       # 查询最小值
            }
        }
    }
}
# 求和
body13 = {
    "query":{
        "match_all":{}
    },
    "aggs":{                              # 聚合查询
        "sum_你的字段名":{                 # 和的key
            "sum":{                        # 和
                "field":"你的字段名"       # 获取该字段的和
            }
        }
    }
}

# 求平均值
body14 = {
    "query":{
        "match_all":{}
    },
    "aggs":{                               # 聚合查询
        "avg_你的字段名":{                 # 平均值的key
            "avg":{                        # 平均值
                "field":"你的字段名"       # 获取所有age的平均值
            }
        }
    }
}

body15 = {
    "query":{
        "bool":{
            "must":[
                {
                    "range":{"你的字段名":{"gte": 0,"lt": 0.15}}
                },
                {
                    "term":{"你的字段名.keyword":"财经"}
                }
            ],
            "must_not":[
                 {
                     "terms":{"你的字段名":["weixin","weibo"]}
                 }
            ],
            "should":[
                {
                    "wildcard":{
                        "title":"zh*"
                    }
                },
                {
                     "multi_match":{"query":"财经","fields":["你的字段名.keyword","你的字段名"]}
                }
            ],
            "minimum_should_match":1
        }
    }
}

# 注意doc_type='_doc',ES的新版本会去掉doc_type,发送请求的时候也不用这个参数了,老版本的ES是不是还需要这个参数不知道
#(说8.x会去掉,7.x的查询也不用这个参数了)
# 只获取_id数据
# a = es.search(index="data*", body=body15, filter_path=["hits.hits._id"])
# 获取所有字段数据
# a = es.search(index="data*", body=body10, filter_path=["hits.hits._*"])

a = es.search(index="data*", body=body15)
print(a)
print("=======================")
# b = es.count(index="data*") # 统计索引的数据量
# print(b)

参考:

https://blog.csdn.net/y472360651/article/details/76652021
https://www.cnblogs.com/bainianminguo/articles/12763099.html文章来源地址https://www.toymoban.com/news/detail-508562.html

到了这里,关于Python语言,ES(Elasticsearch)基础查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(50)
  • Elasticsearch:ES|QL 查询语言简介

    警告 :此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在 Elastic Stack 8.11 中已经提供预览版。 目录 运行 ES|QL 查询 ES|QL API Kibana 限制 ES|QL 语法参考 基本语法 注释 运算

    2024年02月08日
    浏览(30)
  • 推出 Elasticsearch 查询语言 (ES|QL)

    作者:Costin Leau 我很高兴地宣布,经过大约一年的开发,Elasticsearch 查询语言 (ES|QL) 已准备好与世界共享,并已登陆 Elasticsearch 存储库。 ES|QL 是 Elasticsearch® 原生的强大声明性语言,专为可组合性、表现力和速度而设计。 Elasticsearch 支持多种语言,从古老的 queryDSL 到 EQL、KQ

    2024年02月13日
    浏览(29)
  • 怎样查询 elasticsearch es doc 文档中的 version 版本号

    参考链接:https://stackoverflow.com/questions/39016589/how-to-get-the-docs-version-field 记录一下: 需要加一个 version=true 的参数,返回结果中就会返回 version 。 返回结果:

    2024年02月16日
    浏览(32)
  • ES|QL:Elasticsearch的 新一代查询语言

    作者:李捷 “ 学会选择很难。学会正确选择更难。而在一个充满无限可能的世界里学会正确选择则更难,也许是太难了。 ” 巴里-施瓦茨(Barry Schwartz)在《选择的悖论--多就是少》(The Paradox of Choice -More is Less)一书中的一段话概括了为什么灵活性和可定制性过高会让用户

    2024年02月08日
    浏览(28)
  • ElasticSearch(7.8版本)聚合查询使用javaHighLevelRestClient实现(从MySQL聚合查询概念->ES聚合概念及实操)

    申明:本文是在实现ES聚合功能中,将过程中查找的多篇博客文献拼接在一起,参考到的博文全部在标题中附上了原文的超链接,分享出来仅是为了提做一个笔记以防忘记,并给大家提供一个参考。 聚合操作指的是在数据查找基础上对于数据进一步整理筛选行为,聚合操作也

    2023年04月24日
    浏览(42)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL全文检索

    和术语级别查询(Term-Level Queries)不同,全文检索查询(Full Text Queries)旨在 基于相关性搜索和匹配文本数据 。这些查询会对输入的文本进行分析,将其 拆分 为词项(单个单词),并执行诸如分词、词干处理和标准化等操作。 全文检索的关键特点: 对输入的文本进行分析

    2024年01月22日
    浏览(40)
  • Elasticsearch基础学习-常用查询和基本的JavaAPI操作ES

    Elasticsearch是一个基于 lucene 、分布式、通过Restful方式进行交互的 近实时搜索 平台框架。 ELK技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个 开源的高扩展的分布式全文搜索引擎 , 是整个 ELK技术栈的核心。 Elasticsearch是一个基于lucene、分

    2024年02月11日
    浏览(45)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL术语级别查询并结合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 因Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,所以我们在使用springboot的时候也可以很方便的进行集成,本文主要讲述的就是使用springboot实现各类DSL的语法查询。 Elastics

    2024年02月01日
    浏览(36)
  • Elasticsearch查询语言基础

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它基于Apache Lucene库开发,具有高性能、可扩展性和易用性。Elasticsearch查询语言(Elasticsearch Query DSL,简称为ESQ)是Elasticsearch中用于构建查询和搜索请求的语言,它提供了一种强大的方式来查询和分析数据。 Elasticsearch查询语言基

    2024年02月20日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包