En tant que joueur SQL, après être entré en contact avec ElasticSearch, j'ai été troublé par les étranges méthodes d'écriture de son DSL, par exemple dans quels scénarios bool devrait filtrer doit être imbriqué, quand une requête bool est nécessaire et quand peut-on il soit éliminé. Lors du dépannage de problèmes, il est inévitable d'écrire DSL à la main et de recevoir souvent des erreurs ES.
Afin de résoudre ce problème, j'ai essayé de laisser ChatGPT traduire pour moi, et l'effet a été plutôt bon. Regardons cela selon le scénario.
Scénario 1 : Liste de requêtes floues
Dans la page de liste du système backend côté B, nous pouvons généralement voir de nombreuses boîtes de filtres. Les chefs de produit placent souvent la fonction de correspondance floue par ID et nom dans une boîte de filtre appelée « meilleure expérience utilisateur ». S'il est écrit en SQL, c'est très simple :
select * from user where client_id = 123 anduser_id like '%张三%' or user_name like '%张三%';
S'il est stocké dans MySQL, l'ajout de l'index client_id peut réduire considérablement la quantité de données filtrées, et les performances ne seront pas trop mauvaises.
Si la quantité de données est très importante, utilisez ES. On peut demander à ChatGPT comme ceci :
Commencez la question :
ES index name "user", il y a trois champs
- user_id string
- user_name string
- client_id in t
Je souhaite interroger les enregistrements avec les conditions suivantes : client_id = 123 et (user_name = 'Zhang San' ou user_id = 'Zhang San'). Comment dois-je écrire DSL ?
Début de réponse :
Pour interroger les enregistrements de l'index "user" qui remplissent les conditions suivantes : client_id = 123 et (user_name = 'Zhang San' ou user_id = 'Zhang San'), vous pouvez utilisez une requête booléenne combinée avec le terme Requête pour y parvenir. Voici un exemple de requête DSL correspondante :
GET /user/_search{"query": {"bool": {"filter": [{"term": {"client_id": 123}},{"bool": {"should": [{"term": {"user_name": "张三"}},{"term": {"user_id": "张三"}}]}}]}}}
Dans cette requête, nous utilisons une requête booléenne pour garantir que les critères spécifiés sont utilisés pour filtrer les documents.
Dans la clause de filtrage, nous avons deux conditions : l'une est pour la condition que la valeur du champ "client_id" soit 123, en utilisant le terme requête. La deuxième condition est une requête booléenne imbriquée qui contient une clause Should. La clause Should contient deux requêtes de termes : une pour le champ "user_name" et l'autre pour le champ "user_id", qui vérifient toutes deux si la valeur est "Zhang San". En utilisant la clause Should, nous indiquons que l’une des conditions doit correspondre.
Cette requête DSL renverra les enregistrements de documents dont l'ID client est 123 et le nom d'utilisateur est "Zhang San" ou l'ID utilisateur est "Zhang San".
Fin de la réponse :
ChatGPT a non seulement donné la réponse, mais a également donné une explication. On peut juste apporter quelques modifications à l'index dans l'entreprise.
Scénario 2 : Filtrage basé sur les résultats d'agrégation ayant
Sur la base du tableau utilisateur ci-dessus, nous ajoutons un champ ticket_id pour représenter les bons de travail traités. Nous voulons connaître les utilisateurs qui ont traité plus de 100 bons de travail. SQL peut être écrit comme ceci :
select user_id, max(user_name) as user_name,count(ticket_id) as ticket_cnt from user where client_id = 123having count(ticket_id) > 100;
Demandez à ChatGPT :
Commencez à demander :
Nom d'index ES "user", contenant les champs suivants :
- user_id string
- user_ nom string
- client_id int
- ticket_id
Agrégation selon user_id, interrogez l'user_id de count(ticket_id) > 100, et le nom d'utilisateur correspondant à l'user_id La réponse commence : "user_id". champ L'agrégation et l'interrogation de "user_id" qui remplit la condition count(ticket_id) > 100, et le "user_name" correspondant peuvent être implémentées à l'aide des termes agrégation et bucket_selector pipeline agrégation dans la requête d'agrégation. Voici l'exemple de requête DSL correspondant :
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",包含以下字段:
- user_id string
- user_name string
- client_id int
- ticket_id
我要查询处理ticket数量top10 的 user_id 以及对应的user_name
回复开始:
要查询处理 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就开始瞎说了。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Explorer le fonctionnement interne des modèles de langue avec Gemma Scope Comprendre les complexités des modèles de langue IA est un défi important. La sortie de Google de Gemma Scope, une boîte à outils complète, offre aux chercheurs un moyen puissant de plonger

Déverrouiller le succès de l'entreprise: un guide pour devenir un analyste de Business Intelligence Imaginez transformer les données brutes en informations exploitables qui stimulent la croissance organisationnelle. C'est le pouvoir d'un analyste de Business Intelligence (BI) - un rôle crucial dans GU

Instruction ALTER TABLE de SQL: Ajout de colonnes dynamiquement à votre base de données Dans la gestion des données, l'adaptabilité de SQL est cruciale. Besoin d'ajuster votre structure de base de données à la volée? L'énoncé de la table alter est votre solution. Ce guide détaille l'ajout de Colu

Introduction Imaginez un bureau animé où deux professionnels collaborent sur un projet critique. L'analyste commercial se concentre sur les objectifs de l'entreprise, l'identification des domaines d'amélioration et la garantie d'alignement stratégique sur les tendances du marché. Simulé

Excel Counting and Analysis: Explication détaillée du nombre et des fonctions de compte Le comptage et l'analyse des données précises sont essentiels dans Excel, en particulier lorsque vous travaillez avec de grands ensembles de données. Excel fournit une variété de fonctions pour y parvenir, les fonctions Count et Count sont des outils clés pour compter le nombre de cellules dans différentes conditions. Bien que les deux fonctions soient utilisées pour compter les cellules, leurs cibles de conception sont ciblées sur différents types de données. Faisons des détails spécifiques du comptage et des fonctions de coude, mettons en évidence leurs caractéristiques et différences uniques et apprenez à les appliquer dans l'analyse des données. Aperçu des points clés Comprendre le nombre et le cou

La révolution de l'IA de Google Chrome: une expérience de navigation personnalisée et efficace L'intelligence artificielle (IA) transforme rapidement notre vie quotidienne, et Google Chrome mène la charge dans l'arène de navigation Web. Cet article explore les exciti

Réinventuation d'impact: le quadruple bas Pendant trop longtemps, la conversation a été dominée par une vision étroite de l’impact de l’IA, principalement axée sur le résultat du profit. Cependant, une approche plus holistique reconnaît l'interconnexion de BU

Les choses évoluent régulièrement vers ce point. L'investissement affluant dans les prestataires de services quantiques et les startups montre que l'industrie comprend son importance. Et un nombre croissant de cas d'utilisation réels émergent pour démontrer sa valeur


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Version Mac de WebStorm
Outils de développement JavaScript utiles

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.