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

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

相关文章:

  • java进阶之git
  • webpack详细打包配置,包含性能优化、资源处理...
  • Docker离线安装与配置指南
  • weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博,微博登录
  • 几种电气绝缘类型
  • Java求职面试:从Spring Boot到微服务的全面考核
  • 2025企微CRM系统功能对比:会话存档、客户画像与数据分析如何重构客户运营?
  • 云原生周刊:KubeSphere 平滑升级
  • 八数码难题
  • 示例:spring xml+注解混合配置
  • Node.js 操作 ElasticSearch 完整指南:从安装到实战
  • Sentinel源码—8.限流算法和设计模式总结一
  • 大数据学习(112)-HIVE中的窗口函数
  • SpringMVC入门
  • Java常用正则表达式及使用方法
  • @Configuration注解对应实现implements WebMvcConfigurer的配置不生效问题。
  • AI写代码之GO+Python写个爬虫系统
  • Web3实战:从零开发你的ERC20代币合约
  • Idea 配置 Git
  • C++——多态、抽象类和接口
  • 导演汪俊:与孙俪默契合作,还原“蛮好的人生”
  • 匈牙利总理投票反对乌克兰加入欧盟
  • 前瞻2025丨无糖茶,站在转折点?
  • 中央民族乐团团长赵聪已任文旅部艺术司司长
  • 收缩非洲业务专注挖矿,裁减大批外交官,“美国务院改革草案”引争议
  • 长三角议事厅·周报|服务业扩大开放:长三角六城联动新探索