码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • es查询响应结果中获取某些字段的值


            有时候使用es查询出的结果包含多个字段,如果数据中仅仅包含几个字段时,我们是很容易挑出自己需要的字段值,但是如果数据中包含几十或者几百甚至更多时,尤其是数据中嵌套好多层时,不容易直接挑取出需要的值,这时候可以借助程序直接查找出来。或者针对性的直接查询时就限定条件查询某些字段的值。

    直接从es中查询出的示例数据:

    1. {
    2. "took": 918,
    3. "timed_out": false,
    4. "_shards": {
    5. "total": 1,
    6. "successful": 1,
    7. "skipped": 0,
    8. "failed": 0
    9. },
    10. "hits": {
    11. "total": {
    12. "value": 4,
    13. "relation": "eq"
    14. },
    15. "max_score": 1.0,
    16. "hits": [{
    17. "_index": "test",
    18. "_type": "user",
    19. "_id": "QHi1UoIBpyNh4YQ4T1Sq",
    20. "_score": 1.0,
    21. "_source": {
    22. "id": 1001,
    23. "name": "张三",
    24. "age": 20,
    25. "sex": "男",
    26. "grade": {
    27. "Chinese": 99,
    28. "Math": 98,
    29. "English": 96
    30. }
    31. }
    32. },
    33. {
    34. "_index": "test",
    35. "_type": "user",
    36. "_id": "1002",
    37. "_score": 1.0,
    38. "_source": {
    39. "id": 1002,
    40. "name": "李四",
    41. "age": 23,
    42. "sex": "女",
    43. "grade": {
    44. "Chinese": 98,
    45. "Math": 99,
    46. "English": 97
    47. }
    48. }
    49. },
    50. {
    51. "_index": "test",
    52. "_type": "user",
    53. "_id": "1003",
    54. "_score": 1.0,
    55. "_source": {
    56. "id": 1003,
    57. "name": "王五",
    58. "age": 27,
    59. "sex": "男",
    60. "grade": {
    61. "Chinese": 93,
    62. "Math": 90,
    63. "English": 99
    64. }
    65. }
    66. },
    67. {
    68. "_index": "test",
    69. "_type": "user",
    70. "_id": "1004",
    71. "_score": 1.0,
    72. "_source": {
    73. "id": 1004,
    74. "name": "赵六",
    75. "age": 29,
    76. "sex": "女",
    77. "grade": {
    78. "Chinese": 100,
    79. "Math": 95,
    80. "English": 94
    81. }
    82. }
    83. }
    84. ]
    85. }
    86. }

    使用python打印出需要的字段值:

    1. import json
    2. import jmespath
    3. with open('text.txt', 'r', encoding='utf-8') as f:
    4. data = f.read()
    5. json_data = json.loads(data)
    6. # print(json_data)
    7. sources = json_data.get('hits').get('hits')
    8. # print(sources)
    9. for source in sources:
    10. # print(source)
    11. data = source.get('_source')
    12. print(data)
    13. valid_fields = '{name: name, Chinese_grade: grade.Chinese}'
    14. ret = jmespath.search(valid_fields, data)
    15. print(ret)

    运行结果:

    注意:使用json.load()时,会把文本中的fase、true直接变为False、True

    参考博文:

    python中jmespath库用法详解_IT之一小佬的博客-CSDN博客_jmespath python

  • 相关阅读:
    Hive用户中文使用手册系列(二)
    模型推荐丨政务大数据项目案例模型分享
    uniapp运行到安卓模拟器一直在“同步手机端程序文件完成“界面解决办法
    文本相似度算法对比分析,判断内容相似的算法有
    脂肪 、肥胖与健康
    Spring-06 Xml和注解方式配置Aop
    分享 | 计算机组成与设计学习资料+CPU设计源码+实验报告
    【linux命令讲解大全】112.Linux 系统管理工具:dpkg-statoverride 和 dstat 的使用介绍
    Win11远程协助灰色无法勾选?Win11远程协助不能选择的解决方法
    如何在 PyTorch 中冻结模型权重以进行迁移学习:分步教程
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/128160889
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号