当前位置: 首页 > ai >正文

elasticsearch 查询检索

一、查询方式列举

1、多维度查询 关键词:bool must match

{"query": {"bool": {"must": [{"match": {"server_name": "www.test.com"}},{"range": {  //时间查询"createTime": {"gte": "2025-04-14T00:00:00+08:00","lte": "2025-04-15T00:00:00+08:00"}}}]}},"_source": {"includes": [  //查询字段"title","price"],"exclude": [   //排除字段"organId"]}
}

2、模糊查询 关键词:wildcard

匹配出状态码status 以 5 开头的日志

{"query": {"wildcard": {"status": "5*"}}
}

3、指定某个值 同时匹配多个字段 关键词:multi_match

query 要查询的值
fields 要匹配的字段【数组】
匹配出 字段code和status 为400的所有日志

{"query": {"multi_match": {"query":    "400","fields":   [ "code", "status" ]}}
}

4、一个字段查询多个值

关键词:terms
{ “字段”:[ 要匹配的多个值 ] }

{"query": {"terms": {"status": ["400","402","406"]}}
}

5、字段排序

//单字段
{"sort": {"createTime": {"order": "asc"}}
}
//多字段
{"sort": [{"createTime": {"order": "asc"}},{"updateTime": {"order": "desc"}}]
}

6、高量查询

GET /megacorp/employee/_search
{"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"fields" : {"about" : {}}}
}

7、自定义高亮

{"query": {"term": {"description": {"value": "iphone"}}},"highlight": {"post_tags": ["</span>"], "pre_tags": ["<span style='color:red'>"],"fields": {"*":{}}}
}

8、模糊查询(fuzzy)

fuzzy 查询是 term 查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2:
GET /heima/_search
{"query": {"fuzzy": {"title": {"value":"appla","fuzziness":1}}}
}

9、指定间隔分组

interval:间隔,
min_doc_count:过滤为0的分组

{"size":0,"aggs":{"price":{"histogram": {"field": "price","interval": 5000,"min_doc_count": 1}}}
}

10、elasticsearch 深分页

产生原因:from、size 两字段过大,es默认是10000
解决方式:
(1)深度分页之scroll,滚动查询、每次请求两条。可以定制 scroll = 5m意味着该窗口过期时间为5分钟。
 GET /student/_search?scroll=5m{"query": {"match_all": {}},"size": 2}

后边查询的时候需要带上 _scroll_id 参数

 GET /_search/scroll{"scroll":"5m","scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAC0YFmllU"}
(2)search_after 使用索引全局唯一标识字段 、官方推荐使用 _uid 作为全局唯一值,但是只要能表示其唯一性就可以。
  GET /student/_search{"query":{"match_all": {}},"size":2,"sort":[{"uid": "desc"}  ]}

下一次分页,需要将上述分页结果集的最后一条数据的值带上。

  GET /student/student/_search{"query":{"match_all": {}},"size":2,"search_after":[1005],"sort":[{"uid": "desc"}  ]}
深分页对比
分页方式性能优点缺点场景
from+size灵活性好,实现简单深度分页问题数据量比较小,能容忍深度分页问题
scroll解决了深度分页问题无法反应数据的实时性(快照版本),维护成本高,需要维护一个海量数据的导出需要查询海量结果集的数据
search_after性能最好、不存在深度分页问题、能够反映数据的实时变更实现复杂,需要有一个全局唯一的字段、连续分页的实现比较复杂,因为每一次查询都需要上次查询的结果海量数据的分页

注: ElasticSearch Java API之高级查询(分页查询,高亮查询,正则表达式查询,聚合查询等)

参考:
https://blog.csdn.net/qq_37774171/article/details/122931766
https://blog.csdn.net/qq_42402854/article/details/126615064

http://www.xdnf.cn/news/1196.html

相关文章:

  • 1.1 AI大模型与Agent的兴起及其对企业数字化转型的推动作用
  • 变更管理 Change Management
  • opencv 读取3G大图失败,又不想重新编译opencv ,可以如下操作
  • AI催生DLP新战场 | 天空卫士连续6年入选Gartner 全球数据防泄漏(DLP)市场指南
  • 工程投标k值分析系统(需求和功能说明)
  • 【项目】基于MCP+Tabelstore架构实现知识库答疑系统
  • move闯关(更新啦)1
  • 力扣刷题Day 25:反转链表(206)
  • 输入框仅支持英文、特殊符号、全角自动转半角 vue3
  • C# foreach 循环中获取索引的完整方案
  • PCIe体系结构学习入门——PCI总线概述(一)PCI 总线的基础知识
  • [预备知识]4. 概率基础
  • 关于ubuntu密码正确但是无法登录的情况
  • Android-KeyStore安全的存储系统
  • P3909 异或之积 解题报告
  • QML FontDialog:使用FontDialog实现字体选择功能
  • 【重走C++学习之路】16、AVL树
  • Java练习——day3
  • qemu如何支持vmovdqa64指令(百度AI)
  • 游戏工作室为何要更换IP进行多开?工作室使用代理IP要注意什么?
  • 35.编写一个简单的Mybatis插件
  • ​​电商系统用户需求报告(示例)
  • 随着ai技术的应用,及玩具类产品的层出不穷,开发此类产品的情感AI算法技术的底层构架,及情感AI算法的应用场景是转型的比较好的一个方向
  • HTTP状态码有哪些常见的类型?
  • 三网通电玩城平台系统结构与源码工程详解(四):子游戏集成与服务器调度机制全解
  • Spring AOP + Logback + MDC全链路日志追踪
  • 三线服务器通常适用于哪些用户?
  • GPIO(通用输入输出端口)详细介绍
  • 【T2I】TOKENCOMPOSE: Text-to-Image Diffusion with Token-level Supervision
  • 【2025最新面试Java八股】Java虚拟线程怎么回事,是协程吗?