发布时间:2023-06-13
点击次数: ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
作为一个SQL玩家,接触到 ElasticSearch 以后,被其dsl奇奇怪怪的写法所困扰,比如 bool should filter 什么场景下应该嵌套,什么时候 bool query是必须的,什么时候可以干掉。排查问题时,不可避免地需要手写dsl,经常收到ES报错。
为了解决这个问题,我尝试让ChatGPT给我做翻译,效果还不错。下面我们按照场景来看。
在B端后台系统的列表页里,我们通常可以看到很多筛选框。产品经理经常把按 ID 和 Name 模糊匹配的功能放到一个筛选框,名曰“更好的用户体验”。如果用SQL写的话,非常简单:
select * from user where client_id = 123 anduser_id like '%张三%' or user_name like '%张三%';
如果存储在MySQL,加上client_id索引就可以大大减少筛选出的数据量,性能不会太差。
如果数据量非常大,那就用ES吧。我们可以对ChatGPT这样提问:
提问开始:
ES index 名字 "user",有三个字段
我要查询带有以下条件的记录:client_id = 123 and (user_name = '张三' or user_id = '张三')。dsl应该怎么写?
回复开始:
要查询 "user" 索引中满足以下条件的记录:client_id = 123 and (user_name = '张三' or user_id = '张三'),可以使用 bool 查询结合 term 查询来实现。以下是相应的 DSL 查询示例:
GET /user/_search{"query": {"bool": {"filter": [{"term": {"client_id": 123}},{"bool": {"should": [{"term": {"user_name": "张三"}},{"term": {"user_id": "张三"}}]}}]}}}在这个查询中,我们使用了 bool 查询来确保指定的条件被用于过滤文档。
在 filter 子句中,我们有两个条件:一个是针对 "client_id" 字段的值为 123 的条件,使用了 term 查询。第二个条件是一个嵌套的 bool 查询,其中包含一个 should 子句。should 子句中包含了两个 term 查询:一个是针对 "user_name" 字段,另一个是针对 "user_id" 字段,它们都检查值是否为 "张三"。通过使用 should 子句,我们表示其中任一条件匹配即可。
这个 DSL 查询将返回满足 client_id 为 123,并且用户名为 "张三" 或用户ID为 "张三" 的文档记录。
回复结束:
ChatGPT 不只给出了答案,也给出了解释,我们针对业务里的index做一下修改就好。
基于上面的 user 表,我们再加一个 ticket_id 字段,表示处理过的工单,我们要查出处理工单超过100个的用户。SQL可以这样写:
select user_id, max(user_name) as user_name,count(ticket_id) as ticket_cnt from user where client_id = 123h*ing count(ticket_id) > 100;
向ChatGPT提问:
提问开始:
ES index 名字 "user",包含以下字段:
按照 user_id 聚合,查询 count(ticket_id) > 100 的 user_id,以及user_id对应的 user_name
回复开始:
要按照 "user_id" 字段进行聚合,并查询符合条件 count(ticket_id) > 100 的 "user_id",以及对应的 "user_name",可以使用聚合查询中的 terms 聚合和 bucket_selector 管道聚合来实现。以下是相应的 DSL 查询示例:
GET /user/_search{"size": 0,"aggs": {"users": {"terms": {"field": "user_id","size": 10,"min_doc_count": 101// 设置最小文档数,只返回 count(ticket_id) > 100 的聚合结果},"aggs": {"user_name": {"terms": {"field": "user_name","size": 1}},"ticket_count": {"value_count": {"field": "ticket_id"}},"bucket_filter": {"bucket_selector": {"buckets_path": {"count": "ticket_count"},"script": "params.count > 100"// 仅保留 count(ticket_id) > 100 的聚合桶}}}}}}在这个查询中,我们使用了 terms 聚合对 "user_id" 字段进行分组,并在聚合结果中嵌套了 user_name 字段的 terms 聚合和 ticket_id 字段的 value_count 聚合。
在 terms 聚合中,我们设置了 min_doc_count 参数为 101,以仅返回满足 count(ticket_id) > 100 的聚合桶。这样可以过滤掉不满足条件的聚合结果。
最终,我们使用 bucket_selector 管道聚合来进行桶过滤,仅保留满足条件 params.count > 100 的聚合桶。这样,最终的聚合结果中将只包含满足条件的 "user_id" 和对应的 "user_name"。
请注意,根据您的具体需求,您可能需要根据实际情况调整聚合查询中的参数和设置,如设置合适的 size 值来控制返回的聚合桶数量等。
回复结束。
向ChatGPT提问:
提问开始:
ES index 名字 "user",包含以下字段:
我要查询处理ticket数量top10 的 user_id 以及对应的user_name
Seede AI
AI 驱动的设计工具
713
查看详情
回复开始:
要查询处理 ticket 数量排名前 10 的 "user_id",以及对应的 "user_name",可以使用 terms 聚合和 top_hits 子聚合来实现。以下是相应的 DSL 查询示例:
GET /user/_search{"size": 0,"aggs": {"top_users": {"terms": {"field": "user_id","size": 10,"order": {"ticket_count": "desc"}},"aggs": {"user_name": {"terms": {"field": "user_name","size": 1}},"ticket_count": {"value_count": {"field": "ticket_id"}},"top_user_hits": {"top_hits": {"size": 1}}}}}}在这个查询中,我们使用了 terms 聚合对 "user_id" 字段进行分组,并按照 "ticket_count" 字段的降序对分组结果进行排序。
在 terms 聚合中,我们设置了 size 参数为 10,以仅返回前 10 个处理 ticket 数量最多的 "user_id"。
在每个聚合桶中,我们还嵌套了 user_name 字段的 terms 聚合和 ticket_id 字段的 value_count 聚合,分别用于获取对应的 "user_name" 和计算 ticket 数量。
此外,我们使用了 top_hits 子聚合来获取每个聚合桶中的匹配文档的详细信息。在这里,我们设置了 size 参数为 1,以仅获取每个聚合桶中的一条文档信息。
最终,聚合查询的结果将包含处理 ticket 数量排名前 10 的 "user_id",对应的 "user_name",以及每个用户最新的一条文档信息。
请注意,根据实际情况,您可能需要根据具体需求调整聚合查询中的参数和设置,如设置合适的 size 值来控制返回的聚合桶数量,以及添加其他的聚合或过滤条件等。
回复结束。
本着快速出活/快速解决问题的心态,ChatGPT确实提升了工作效率。不过在解决需求之后,还是要补补课,了解下ElasticSearch的用法和工作机制。因为ChatGPT是语言模型,一旦逻辑复杂起来,ChatGPT就开始瞎说了。
以上就是借助ChatGPT快速上手ElasticSearch dsl的详细内容,更多请关注其它相关文章!
# 太多
# 海淀外贸网站优化建设
# 无锡网站建设报价模板
# 句容优化网站价格
# 平湖中小型网站优化
# 天津百度搜索网站优化
# 大石桥seo推广
# seo网站优化如何做到首页
# 海曙网站建设电话
# 从化网站建设定制哪家好
# 房产网站建设指南pdf
# 语言模型
# 子句
# 我要
# 来实现
# 中国科学院
# 可以使用
# 使用了
# 开源
# 在这个
# 文档
# chatgpt
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
赋能金融新生态,多家银行创新应用成果亮相世界人工智能大会
AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?
企业软件行业更将被AI全面重构!Moka李国兴:未来优秀组织和个人将一定是善于使用AI生产力的
华为推出全新操作系统HarmonyOS 4,AI和新引擎完美融合
央视报道!星纪魅族集团车载人机交互技术成世界移动通信大会焦点
苹果在韩举办首届中小企业智能制造论坛,加速推动工业4.0发展
高质量数据推动AI场景化应用快速发展及落地
WHEE使用教程
《共同的演化》展览启幕,重新思考人类与人工智能关系
用人工智能技术,亚马逊为用户生成产品评论摘要,帮助他们轻松选购
联合国秘书长称支持建立全球人工智能监管机构
全媒封面丨⑤商汤科技:原创AI算法“发电厂”
上新7款产品,美图继续“蹭”AI
金山办公宣布与英伟达团队合作,加速WPS AI服务
OPPO三方联合发布AI可持续发展白皮书,坚持发展健康AI生态
XREAL Beam 投屏盒子正式发布:支持“可悬停 AR 空间屏”
2025世界人工智能大会成功召开
华为HarmonyOS 4将集|成人|工智能大型模型
令人惊叹!AI模型能够以iPhone照片为基础创作诗歌
马斯克反讽人工智能AI炒作:“机器学习”本质就是统计
V社悄悄封禁使用AI生成美术素材的游戏
马斯克回应“人工智能让一切变得更好”:我们已经是半机器人了
对话无界AI创始人长铗:AI的创业机会在应用层丨创新者Innovator
Midjourney 5.2震撼发布!原画生成3D场景,无限缩放无垠宇宙
人形机器人打开精密齿轮市场全新空间!受益上市公司梳理
“痴迷”元宇宙,魔珐科技想做什么?
清华系面壁智能开源中文多模态大模型VisCPM :支持对话文图双向生成,吟诗作画能力惊艳
特斯拉首发人形机器人“擎天柱”亮相世界人工智能大会
国内AI大模型“安卓时刻”到来!阿里云通义千问免费、开源、可商用
【趋势周报】全球人工智能产业发展趋势:OpenAI向美国专利局提交“GPT-5”商标申请
中国移动副总经理高同庆:打造人工智能时代的智能服务运营新范式
腾讯自主研发机器狗 Max 升级,可“奔跑跳跃”完成避障动作
无人机巡检方案是什么,该如何选择适合的巡检方案
插画师对AI绘画软件的态度是怎样的?
郭帆谈ChatGPT:电影行业需要创新,否则人工智能将让电影变得平庸
腾讯TRS之元学习与跨域推荐的工业实战
人工智能创作的“婴儿版超级英雄”,你觉得哪个最可爱
Stability AI 推出文生图模型 SDXL0.9,GPU要求下探至消费级水平
70年前他本想逃避考试,却影响了整个互联网
25个AI智能体源码现已公开,灵感来自斯坦福的「虚拟小镇」和《西部世界》
一家 380 亿美元的数据巨头,要掀起企业「AI 化」革命
百度文心一言App上架苹果商店,人工智能创作引发热议
高通发布长期产品计划,为工业和企业物联网产品提供全新组合方案
大疆 Air 3 无人机售价和实物照片曝光
轻量级的深度学习框架Tinygrad
280万条多模态指令-响应对,八种语言通用,首个涵盖视频内容的指令数据集MIMIC-IT来了
AI 模型 Stable Diffusion 升级:正常生成五指、图像更逼真
GPT-4使用混合大模型?研究证明MoE+指令调优确实让大模型性能超群
再也不怕「视频会议」尬住了!谷歌CHI顶会发布新神器Visual Captions:让图片做你的字幕助手
联想举办2025创新开放日,展出260余项算力及AI产品技术