es查询相关问题
如果没有kibana管理台页面工具还可以用postman_search不带条件查询curl --location --request GET http://ip:9200/xxx-gift_pack_record202409/_search \ --header Authorization: Basic ZWxhc3RpYzpIaWhvbm9yQG1hcmtldDFuZw_search带条件查询curl --location --request GET http://ip:9200/xxx-t_prize_grant_record202409/_search \ --header Authorization: Basic ZWxhc3RpYzpIaWhvbm9yQG1hcmtldDFuZw \ --header Content-Type: application/json \ --data-raw { from: 0, size: 15, query: { bool: { filter: [ {term: {prize_type: {value: 8, boost: 1.0}}}, {range: {reward_time: {from: 2024-09-01 00:00:00, to: 2026-09-30 23:59:59, include_lower: true, include_upper: true, boost: 1.0}}}, {term: {es_delete_flag: {value: false, boost: 1.0}}} ], adjust_pure_negative: true, boost: 1.0 } }, sort: [ {reward_time: {order: desc}}, {grant_id: {order: desc}} ], track_total_hits: 2147483647 }_count查询curl --location --request GET http://ip:9200/xxx-t_prize_grant_record202409/_count \ --header Authorization: Basic ZWxhc3RpYzpIaWhvbm9yQG1hcmtldDFuZw \ --header Content-Type: application/json \ --data-raw { query: { bool: { filter: [ {term: {prize_type: {value: 8, boost: 1.0}}}, {range: {reward_time: {from: 2024-09-01 00:00:00, to: 2026-09-30 23:59:59, include_lower: true, include_upper: true, boost: 1.0}}}, {term: {es_delete_flag: {value: false, boost: 1.0}}} ], adjust_pure_negative: true, boost: 1.0 } } }profile分析curl --location --request GET http://ip:9200/xxx-t_prize_grant_record202409/_search \ --header Authorization: Basic ZWxhc3RpYzpIaWhvbm9yQG1hcmtldDFuZw \ --header Content-Type: application/json \ --data-raw { profile: true, from: 0, size: 15, query: { bool: { filter: [ {term: {prize_type: {value: 8, boost: 1.0}}}, {range: {reward_time: {from: 2024-09-01 00:00:00, to: 2026-09-30 23:59:59, include_lower: true, include_upper: true, boost: 1.0}}}, {term: {es_delete_flag: {value: false, boost: 1.0}}} ], adjust_pure_negative: true, boost: 1.0 } }, sort: [ {reward_time: {order: desc}}, {grant_id: {order: desc}} ], track_total_hits: 2147483647 }在查询里加上 profile: trueexplain分析curl --location --request GET http://ip:9200/xxx-t_prize_grant_record202409/_search \ --header Authorization: Basic ZWxhc3RpYzpIaWhvbm9yQG1hcmtldDFuZw \ --header Content-Type: application/json \ --data-raw { explain: true, from: 0, size: 15, query: { bool: { filter: [ { term: { prize_type: { value: 8, boost: 1.0 } } }, { range: { reward_time: { from: 2024-09-01 00:00:00, to: 2026-09-30 23:59:59, include_lower: true, include_upper: true, boost: 1.0 } } }, { term: { es_delete_flag: { value: false, boost: 1.0 } } } ], adjust_pure_negative: true, boost: 1.0 } }, sort: [ { reward_time: { order: desc } }, { grant_id: { order: desc } } ], track_total_hits: 2147483647 }在查询里加上 explain: true Elasticsearch 的 Explain 和 Profile 功能详解Explain解释查询作用解释为什么某个文档匹配或不匹配查询显示评分计算过程。使用场景调试相关性评分问题理解查询匹配逻辑优化查询性能使用方法# 方式1使用 _explain 端点 GET /index_name/_explain/doc_id { query: { match: { field: search term } } } # 方式2在 _search 中添加 explain 参数 GET /index_name/_search { explain: true, query: { match: { field: search term } } }返回信息包含value匹配得分description评分描述details详细的评分计算过程matched是否匹配⚡Profile性能分析作用详细分析查询执行过程识别性能瓶颈。使用场景优化复杂查询性能识别慢查询原因分析聚合操作性能使用方法GET /index_name/_search { profile: true, query: { match: { field: search term } } }返回信息包含查询阶段Query Phasequery查询执行详情rewrite_time查询重写时间collectors结果收集器信息获取阶段Fetch Phasefetch文档获取详情load_source源数据加载时间聚合阶段Aggregation Phase聚合操作执行详情两者区别特性ExplainProfile目的解释评分机制分析性能瓶颈输出评分计算详情时间消耗详情粒度单个文档整个查询使用场景相关性调试性能优化实际应用示例Explain 示例结果_explanation: { value: 0.0, description: sum of:, details: [ { value: 0.0, description: match on required clause, product of:, details: [ { value: 0.0, description: # clause, details: [] }, { value: 1.0, description: prize_type:[8 TO 8], details: [] } ] }, { value: 0.0, description: match on required clause, product of:, details: [ { value: 0.0, description: # clause, details: [] }, { value: 1.0, description: DocValuesFieldExistsQuery [fieldreward_time], details: [] } ] }, { value: 0.0, description: match on required clause, product of:, details: [ { value: 0.0, description: # clause, details: [] }, { value: 1.0, description: es_delete_flag:F, details: [] } ] } ] }整体含义value: 0.0这个文档的最终相关性评分是0分description: sum of:总评分是由多个子评分相加得到的三个必须子句分析您的查询包含三个必须匹配的条件每个条件都产生了0分1.第一个条件prize_type 匹配{ value: 0.0, description: match on required clause, product of:, details: [ {value: 0.0, description: # clause, details: []}, {value: 1.0, description: prize_type:[8 TO 8], details: []} ] }✅prize_type:[8 TO 8]值为1.0表示prize_type8匹配成功❓# clause值为0.0这是Elasticsearch内部计算的一个因子2.第二个条件reward_time 字段存在性检查{ value: 0.0, description: match on required clause, product of:, details: [ {value: 0.0, description: # clause, details: []}, {value: 1.0, description: DocValuesFieldExistsQuery [fieldreward_time], details: []} ] }✅DocValuesFieldExistsQuery [fieldreward_time]值为1.0表示reward_time字段存在❓# clause值为0.03.第三个条件es_delete_flag 匹配{ value: 0.0, description: match on required clause, product of:, details: [ {value: 0.0, description: # clause, details: []}, {value: 1.0, description: es_delete_flag:F, details: []} ] }✅es_delete_flag:F值为1.0表示es_delete_flagF匹配成功❓# clause值为0.0关键结论所有三个条件都匹配成功prize_type8✅reward_time字段存在 ✅es_delete_flagF✅但最终评分是0这是因为您使用的是filter上下文不是query上下文在过滤上下文中Elasticsearch不计算相关性评分所有匹配文档的评分都是0这是正常且预期的行为# clause值为0的解释这是Elasticsearch内部用于计算的一个因子在filter上下文中这个值被设置为0因为不需要计算相关性为什么这样设计性能优化filter上下文跳过评分计算性能更好缓存友好filter结果可以被缓存提高查询速度布尔逻辑只关心是否匹配不关心匹配程度✅您的查询是正常的您的查询完全正确所有条件都匹配成功。评分为0是filter上下文的正常行为表示✅ 文档匹配所有过滤条件✅ 应该被包含在结果集中✅ 只是没有计算相关性评分而已不需要担心这个0分这是Elasticsearch filter查询的标准行为Profile 示例结果profile: { shards: [ { id: [REHyAdbwSWS8DMd8dOCkGQ][marketing_test_drcn-t_prize_grant_record202409][0], searches: [ { query: [ { type: BooleanQuery, description: #prize_type:[8 TO 8] #ConstantScore(DocValuesFieldExistsQuery [fieldreward_time]) #es_delete_flag:F, time_in_nanos: 4064629, breakdown: { set_min_competitive_score_count: 0, match_count: 0, shallow_advance_count: 0, set_min_competitive_score: 0, next_doc: 3636537, match: 0, next_doc_count: 24754, score_count: 0, compute_max_score_count: 0, compute_max_score: 0, advance: 22021, advance_count: 2, score: 0, build_scorer_count: 7, create_weight: 31850, shallow_advance: 0, create_weight_count: 1, build_scorer: 374221 }, children: [ { type: IndexOrDocValuesQuery, description: prize_type:[8 TO 8], time_in_nanos: 1248668, breakdown: { set_min_competitive_score_count: 0, match_count: 0, shallow_advance_count: 0, set_min_competitive_score: 0, next_doc: 973861, match: 0, next_doc_count: 24754, score_count: 0, compute_max_score_count: 0, compute_max_score: 0, advance: 511, advance_count: 4, score: 0, build_scorer_count: 9, create_weight: 461, shallow_advance: 0, create_weight_count: 1, build_scorer: 273835 } }, { type: ConstantScoreQuery, description: ConstantScore(DocValuesFieldExistsQuery [fieldreward_time]), time_in_nanos: 2578938, breakdown: { set_min_competitive_score_count: 0, match_count: 0, shallow_advance_count: 0, set_min_competitive_score: 0, next_doc: 0, match: 0, next_doc_count: 0, score_count: 0, compute_max_score_count: 0, compute_max_score: 0, advance: 2561666, advance_count: 24756, score: 0, build_scorer_count: 9, create_weight: 4428, shallow_advance: 0, create_weight_count: 1, build_scorer: 12844 }, children: [ { type: DocValuesFieldExistsQuery, description: DocValuesFieldExistsQuery [fieldreward_time], time_in_nanos: 923343, breakdown: { set_min_competitive_score_count: 0, match_count: 0, shallow_advance_count: 0, set_min_competitive_score: 0, next_doc: 0, match: 0, next_doc_count: 0, score_count: 0, compute_max_score_count: 0, compute_max_score: 0, advance: 914637, advance_count: 24756, score: 0, build_scorer_count: 9, create_weight: 300, shallow_advance: 0, create_weight_count: 1, build_scorer: 8406 } } ] }, { type: TermQuery, description: es_delete_flag:F, time_in_nanos: 1060002, breakdown: { set_min_competitive_score_count: 0, match_count: 0, shallow_advance_count: 0, set_min_competitive_score: 0, next_doc: 0, match: 0, next_doc_count: 0, score_count: 0, compute_max_score_count: 0, compute_max_score: 0, advance: 1020038, advance_count: 24757, score: 0, build_scorer_count: 9, create_weight: 9127, shallow_advance: 0, create_weight_count: 1, build_scorer: 30837 } } ] } ], rewrite_time: 10349, collector: [ { name: SimpleFieldCollector, reason: search_top_hits, time_in_nanos: 3358378 } ] } ], aggregations: [] }, { id: [SQYmE1nZRpiq2RL4t8yaKQ][marketing_test_drcn-t_prize_grant_record202409][1], ... }, { id: [SQYmE1nZRpiq2RL4t8yaKQ][marketing_test_drcn-t_prize_grant_record202409][2], ... } ] }这个 Profile 结果显示了您的 Elasticsearch 查询在3个分片上的详细性能分析。让我为您详细解读整体查询结构您的查询包含三个必须条件prize_type:[8 TO 8]- prize_type等于8ConstantScore(DocValuesFieldExistsQuery [fieldreward_time])- reward_time字段存在es_delete_flag:F- es_delete_flag等于F⏱️性能关键指标分片0总查询时间4,064,629 纳秒 ≈4.06毫秒处理文档数24,754 个文档主要耗时next_doc操作3.64毫秒分片1总查询时间3,870,708 纳秒 ≈3.87毫秒处理文档数24,267 个文档主要耗时next_doc操作3.46毫秒分片2总查询时间3,855,221 纳秒 ≈3.86毫秒处理文档数24,513 个文档主要耗时next_doc操作3.47毫秒性能瓶颈分析1.主要耗时操作next_doc占查询时间的85-90%这是遍历文档的主要操作advance在reward_time和es_delete_flag查询中消耗较多时间2.各子查询性能prize_type:[8 TO 8]性能最好主要耗时在next_docreward_time字段存在检查性能较差advance操作耗时严重es_delete_flag:F性能中等advance操作耗时较多问题识别主要性能问题DocValuesFieldExistsQuery性能瓶颈检查reward_time字段是否存在消耗了大量时间每个分片需要 advance 操作约2.4万次es_delete_flag查询优化空间Term查询的advance操作也有优化空间良好表现prize_type范围查询性能良好三个分片性能相对均衡3.8-4.1毫秒查询重写时间很短10-25微秒最佳实践Explain 使用时机当搜索结果不符合预期时需要理解评分模型时调试 boosting 和权重设置Profile 使用时机查询响应时间过长时需要优化复杂聚合时识别索引或映射问题生产环境注意两者都会增加查询开销避免在生产环境频繁使用建议在开发或测试环境进行调试问题public static SearchSourceBuilder page(SearchSourceBuilder builder, PageDto page) { builder.trackTotalHits(true); //builder.trackTotalHits(false); // es 分页从 0 开始 builder.from((page.getPageNum() - 1) * page.getPageSize()) .size(page.getPageSize()); return builder; } SearchSourceBuilder sourceBuilder new SearchSourceBuilder() .query(boolQuery) // 构建排序 .sort(SortBuilders.fieldSort(Constants.REWARD_TIME).order(SortOrder.DESC)) .sort(SortBuilders.fieldSort(Constants.GRANT_ID).order(SortOrder.DESC)); PageHelper.page(sourceBuilder, req.getPage()); // 构建请求 searchRequest.source(sourceBuilder); log.info(hit es [prize-grant-record] mapper, param:[{}], searchRequest); // 执行查询 SearchResponse response clientFactory.getInstance().search(searchRequest, RequestOptions.DEFAULT); return ResponseConverter.convert(response.getHits(), cls);如果builder.trackTotalHits(true)映射查询语句{ from: 45, size: 15, query: { bool: { filter: [{ range: { reward_time: { from: 2026-02-27 19:24:30, to: 2026-03-02 19:24:30, include_lower: true, include_upper: true, boost: 1.0 } } }, { term: { es_delete_flag: { value: false, boost: 1.0 } } }], adjust_pure_negative: true, boost: 1.0 } }, sort: [{ reward_time: { order: desc } }, { grant_id: { order: desc } }], track_total_hits: 2147483647 }会默认把符合查询条件的总记录数查出来!主要性能问题分析1.track_total_hits: 2147483647 问题严重程度⭐⭐⭐⭐⭐track_total_hits: 2147483647问题分析这个设置强制ES计算精确的命中总数即使有数百万条记录ES默认只返回前10,000个匹配文档的计数设置此值会显著增加查询开销对于大数据量的索引计算精确总数非常消耗资源建议解决方案// 移除或限制track_total_hits track_total_hits: false // 或者设置一个合理的上限 track_total_hits: 10000如果builder.trackTotalHits(false)映射查询语句{ from: 45, size: 15, query: { bool: { filter: [{ range: { reward_time: { from: 2026-02-27 19:24:30, to: 2026-03-02 19:24:30, include_lower: true, include_upper: true, boost: 1.0 } } }, { term: { es_delete_flag: { value: false, boost: 1.0 } } }], adjust_pure_negative: true, boost: 1.0 } }, sort: [{ reward_time: { order: desc } }, { grant_id: { order: desc } }], track_total_hits: -1 }不会查出总记录数可以使用_count查出总数结合_search查询当前页数据一起返回给前端进行分页计算总页数count和search可以使用两个线程异步一起查询。

相关新闻

SpriteJS 渲染引擎选择、自动降级与内存控制(bufferSize)实践指南

SpriteJS 渲染引擎选择、自动降级与内存控制(bufferSize)实践指南

图形学3D渲染 【免费下载链接】spritejs A cross platform high-performance graphics system. 项目地址: https://gitcode.com/gh_mirrors/sp/spritejs 点击查看 免费下载 本文围绕 SpriteJS 的渲染引擎体系展开,讲解其多引擎架构下的默认选择策略、we…

2026/10/13 2:24:28 阅读更多 →
darktable 教程:免费开源 RAW 照片处理从安装到出片的完整指南

darktable 教程:免费开源 RAW 照片处理从安装到出片的完整指南

darktable 教程:免费开源 RAW 照片处理从安装到出片的完整指南 【免费下载链接】darktable darktable is an open source photography workflow application and raw developer 项目地址: https://gitcode.com/GitHub_Trending/da/darktable 给拍 RAW、又不想…

2026/10/13 2:24:28 阅读更多 →
深度解析 LLM Agent ReAct 架构:基于 Function Calling 的代码重构实践

深度解析 LLM Agent ReAct 架构:基于 Function Calling 的代码重构实践

1. 背景:为什么我们需要 Agent?痛点:传统编程中,简单的重复性工作(如加注释、改格式)浪费了开发者大量时间。思路:既然 LLM(大模型)懂代码,能不能让它自己读取…

2026/10/13 2:24:28 阅读更多 →

最新新闻

UE4 C++设计模式实战:用Actor、Component和状态机重构玩法代码

UE4 C++设计模式实战:用Actor、Component和状态机重构玩法代码

设计模式这个东西,一说起来就像大学课堂里的PPT:UML图、抽象类、一堆定义。但等你真正用 C 在 UE4 里写玩法系统时,你会发现这些概念根本不是考题,而是每天在用的工具。甚至可以说,UE4 本身就是一个用设计模式堆起来的…

2026/10/13 3:07:45 阅读更多 →
会计信息管理系统设计与实现:从业务拆解到答辩全流程解析

会计信息管理系统设计与实现:从业务拆解到答辩全流程解析

每年课设季,总有人在群里问“有没有代码量大一点、又不算太难的题目”。会计信息管理系统这份源码,我前前后后在不同群里见过好几回,估计很多同学手里都躺着一份压缩包。它属于典型的课程设计/毕业设计题材,但从“拿到源码”到“能…

2026/10/13 3:07:45 阅读更多 →
MATLAB微分方程求解:从刚性识别到三层可信验证

MATLAB微分方程求解:从刚性识别到三层可信验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:07:45 阅读更多 →
单卡3090跑通Llama-2-7B的LoRA全链路:环境、数据、训练、合并与部署

单卡3090跑通Llama-2-7B的LoRA全链路:环境、数据、训练、合并与部署

简介:这是一份面向算法工程师、研发人员与技术爱好者的LLM高效微调实战指南,聚焦算力受限场景下的工业级落地路径,解决大模型微调门槛高、环境配置复杂、数据质量难控、LoRA参数调优无从下手等核心痛点。资源为单文件PDF文档(578K…

2026/10/13 3:07:45 阅读更多 →
artcraft工具链设计:分层解耦与脚本化优先的创作流程实践

artcraft工具链设计:分层解耦与脚本化优先的创作流程实践

1. 从“artcraft”这个名字说起:一个被低估的创作工具链思路第一次看到“artcraft”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率不是一个单一工具,而是一套围绕“艺术化创作”搭建起来的工作流或者工具集合。为什么这么说&#x…

2026/10/13 3:07:45 阅读更多 →
Git操作实战:从提交、分支合并到事故救援

Git操作实战:从提交、分支合并到事故救援

说个经常见到的场景。身边不少同学背Git命令背得滚瓜烂熟:git add、git commit、git push、git pull,张口就来;可真到项目里把代码搞乱了,或者和别人合并时出现冲突,就完全不知道从哪下手。越是这种时候,越…

2026/10/13 3:06:45 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →