借助ChatGPT快速上手ElasticSearch dsl


☞☞☞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的详细内容,更多请关注其它相关文章!


# 太多  # 株洲网站优化设计ppt  # 手机网站制作推广  # 崇左北京网站建设  # 阳泉微沙盘网站建设费用  # 泰州seo站外推广发帖  # 如何做推广和运营销售  # 湖北seo引擎优化价格  # 推广营销与销售  # 杭州新站优化seo  # 南通网站建设现状分析  # 语言模型  # 子句  # 我要  # 来实现  # 中国科学院  # 可以使用  # 使用了  # 开源  # 在这个  # 文档  # chatgpt 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 新华三集团总裁兼首席执行官于英涛:人工智能时代需要想象力,更需要精耕务实  研究发现AI聊天机器人ChatGPT不会讲笑话,只会重复25个老梗  用AI升级会议体验!思必驰多款会议产品亮相全球智博会!  微软推出人工智能模型 CoDi,可互动和生成多模态内容  美军AI无人机“误杀”操作员,人工智能要在军事领域毁灭人类?  视觉中国宣布推出AI灵感绘图、画面扩展功能  人工智能助力精准学习,猿辅导小猿学练机满足学生个性化学习需求  0代码微调大模型火了,只需5步,成本低至150块  对话式论文阅读工具PaperMate上线,综述细节AI告诉你  爱设计PPT发布第二代AI一键生成PPT产品:智能、个性化、自动化  马斯克嘲讽人工智能:机器学习本质就是统计学  消息称 Meta Quest 将推 VR 游戏订阅:每月 7.99 美元,任选两款  百度文心一言App上架苹果商店,人工智能创作引发热议  ChatGPT会成为你家新的语音助手吗?  将上下文长度扩展到256k,无限上下文版本的LongLLaMA来了?  先进技术在防止全球数据丢失方面的作用  大脚攀爬者车主福利!无人机、运动相机大奖等你来挑战  腾讯企点客服接待与营销分析能力升级!企业操作更高效、人机交互更智能  放弃自动驾驶,也是一种和解  OpenAI已向中国申请注册“GPT-5”商标,此前已在美国提交申请  AIGC 风潮刮到游戏产业,巨人网络与阿里云达成“游戏 +AI ”合作  令人震惊的特斯拉机器人  谷歌在人工智能领域没有“护城河”?  中国最强AI研究院的大模型为何迟到了  官宣!爱康AI未来之夜三大亮点提前剧透!  “世界人工智能之都”的新烦恼:AI热潮无法拉动大量就业  联合国秘书长称支持建立全球人工智能监管机构  调查:过半数艺术家认为 AI 作图无法帮助他们的工作  Vision Pro头显重磅发布;苹果收购AR厂商Mira  美版贴吧8000小组自爆停摆!拒绝数据被谷歌OpenAI白嫖,CEO被网友骂翻:背刺第三方应用  小艺将具备大模型能力,鸿蒙4加速AI普及之路  AIGC浪潮下,联想集团再加码计算与人工智能  机智云AI离线语音识别模组,让家电变得更加智能便捷  微软大牛加入ZOOM,AI人才大战打响  华为发布两款AI存储新品  复旦发布「新闻推荐生态系统模拟器」SimuLine:单机支持万名读者、千名创作者、100+轮次推荐  探索人工智能在物联网领域的影响与改变  国内首款大尺寸仿鸵双足机器人“大圣”亮相,穿戴红色战袍  成功孵化首个大型模型解决方案的重庆人工智能创新中心  AI生成会议纪要 百度如流升级推出超级助手、智能编码等功能  特斯拉人形机器人将亮相 预计售价不超过15万元  AMD称下半年AI显卡供应充足,不需要像NVIDIA那样加价抢购  探索人工智能和物联网的动态融合  印象笔记开放旗下“印象 AI”,可一键生成思维导图、写文章等  7大探索区域打造沉浸式玩乐“元宇宙” 昆明京东MALL未来科技探索官全城招募中  Meta 发布 Voicebox AI 模型:可生成音频信息,用于 NPC 对话等  看了天美对AI的布局,我感觉它想得是真明白  成都大运会闭幕式引入人形机器人展示表演  阿里云推出通义万相AI绘画大模型  华为发布大模型时代AI存储新品 

 2023-06-13

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.