400 128 6709

行业新闻

借助ChatGPT快速上手ElasticSearch dsl

发布时间:2023-06-13点击次数:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

借助ChatGPT快速上手ElasticSearch dsl

作为一个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",有三个字段

  1. user_id string
  2. user_name string
  3. client_id int

我要查询带有以下条件的记录: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做一下修改就好。

场景二: 根据聚合结果进行过滤 h*ing

基于上面的 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",包含以下字段:

  1. user_id string
  2. user_name string
  3. client_id int
  4. ticket_id

按照 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 值来控制返回的聚合桶数量等。

回复结束。

场景三: 聚合以后取topK

向ChatGPT提问:

提问开始:

ES index 名字 "user",包含以下字段:

  1. user_id string
  2. user_name string
  3. client_id int
  4. ticket_id

我要查询处理ticket数量top10 的 user_id 以及对应的user_name

Seede AI Seede AI

AI 驱动的设计工具

Seede AI 713 查看详情 Seede AI

回复开始:
要查询处理 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


相关推荐: 美踏控股推出创新人工智能大数据模型“心乐舞河”:虚拟人音舞社交的新体验  人工智能助力林草行业高质量发展  破解零碳产业园建设规范和成果评价难题  人工智能在重症监护室的未来  腾讯TRS之元学习与跨域推荐的工业实战  LinkedIn 推出生成式 AI 辅助撰写帖文功能,将向所有用户开放  小米又拿下国际比赛第一:AI翻译立功  科学家称,面对人工智能,人类未来或只有灭亡与虚拟永生两个选择  抛媚眼给瞎子看?微软、谷歌的AI广告被广告主抵制  高质量数据推动AI场景化应用快速发展及落地  马斯克发推讽刺人工智能,机器学习本质是统计?  NTU、上海AI Lab整理300+论文:基于Transformer的视觉分割最新综述出炉  生成式人工智能如何改变云安全的游戏规则  北京市通用人工智能产业创新伙伴计划名单公布,京东科技入选“算力伙伴”  华为即将推出HarmonyOS 4,再度领先行业的AI技术  普林斯顿Infinigen矩阵开启!AI造物主100%创造大自然,逼真到炸裂  SnapFusion技术大幅提升AI图像生成速度  “无人驾驶船”将首次亮相世界人工智能大会,下半年或开进上海迪士尼  人工智能大胆预测:银河系至少有2万个地球,36种外星文明  人工智能如何与智能家居集成  AYANEO AIR 1S 掌机 7 月 9 日发布:R7 7840U + OLED 屏  飒智智能机器人核心技术与应用论坛暨一体化控制器发布会成功举办  财联社首档运用虚拟人技术播报栏目《AI半小时》今晚上线!敬请期待  一文读懂自动驾驶的激光雷达与视觉融合感知  工信部信通院发布《2025大模型和AIGC产业图谱》 360智脑覆盖全产业链  美图公司:Wink国内首发AI画面拓展功能  马斯克发推讽刺人工智能:机器学习的本质就是统计  拓普龙7188ML:轻便壁挂式工控机箱,为人工智能应用场景提供有力保障  遵义市首次引入手术机器人,成功实施全膝关节置换术  人工智能进入绿植界,智能庭院市场初具规模  微软 Copilot 团队主管呼吁用户与 AI 交流时应使用恰当的礼貌用语  云南首例达芬奇机器人微创心脏手术成功开展  人工智能颠覆软件测试四大方式  2025“春晖杯”人工智能专场对接活动举办  微软 GitHub Copilot 编程助手被投诉:换口吻改写公共代码来躲版权  全国体育人工智能大会举办,专家聚焦体育人工智能领域人才培养  AI大模型,将为智慧城市带来哪些新变化?  电力人工智能数据集目录首次发布  掌阅科技申请阅爱聊商标 掌阅科技申请AI相关商标  时隔 4 年:谷歌更新安卓机器人 LOGO,形象更立体  华为HarmonyOS 4将集|成人|工智能大型模型  人工智能行业急缺人 AI人才年薪能达近42万元  GPT-4成功战胜AI-Guardian审核系统:谷歌研究团队的人工智能抵抗人工智能  亚马逊确认今年不举办re:MARS人工智能大会  联想首发AI PC于今年秋季,英特尔CEO确认AI PC时代来临  华为将于 7 月发布面向 AI 大模型的新款存储产品  360发布认知型通用大模型“360智脑4.0” 全面接入360全家桶  微幼科技推出全自动晨检机器人,助力幼儿园校园健康检测  微软更新服务协议,以防止通过AI服务进行逆向工程和数据抓取  小红书陷入麻烦!被指控未经许可使用用户图片进行AI训练 

400 128 6709
E-mail

contact@tlftec.cn

扫一扫,添加微信

©  云南淘乐房科技有限公司 版权所有  滇ICP备2025071560号  

云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司