2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dans le développement et l'exploitation quotidiens d'Elasticsearch (ES), nous rencontrons souvent des scénarios dans lesquels des requêtes similaires doivent être exécutées fréquemment. Ces requêtes peuvent impliquer plusieurs champs, conditions de filtrage et analyses globales en raison de la complexité de la logique métier. Afin d'optimiser ces opérations et d'améliorer l'efficacité du développement, Elasticsearch propose la fonction de modèles de recherche. Cet article explique comment utiliser les modèles de recherche d'Elasticsearch pour réutiliser et partager des requêtes.
Dans le développement quotidien, bien que la plupart des requêtes puissent être relativement simples, dans certains scénarios commerciaux complexes (tels que la finance, la médecine, etc.), une recherche peut devoir transmettre ou renvoyer des dizaines de champs et impliquer des conditions de filtrage et d'agrégation complexes. . À ce stade, écrire manuellement chaque requête est non seulement inefficace, mais également sujet aux erreurs. Les modèles de recherche sont comme des procédures ou des fonctions stockées dans MySQL. Ils ne doivent être définis qu'une seule fois, et la fonction de recherche peut être complétée ultérieurement dans le code en appelant le modèle et en transmettant des paramètres, ce qui améliore considérablement l'efficacité du développement et la flexibilité des requêtes.
La forme de base du modèle de recherche consiste à définir un objet JSON contenant des conditions de requête et à transmettre_search/template
Appels API. Par exemple:
GET /index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "真正的数值",
"size": 100
}
}
Dans cet exemple,{{kw}}
et{{size}}
est une variable dans le modèle, passéeparams
Les objets transmettent des valeurs spécifiques.
toJSON
La forme est caractérisée parsource
Utilisez des chaînes pour définir et des caractères d'échappement sont requis. Par exemple:
GET cars/_search/template
{
"source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
"params": {
"parameter": {
"remark": "真正的数值"
}
}
}
utiliserjoin
La méthode peut concaténer les éléments du tableau en une chaîne pour les conditions de requête. Par exemple:
GET index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": ["大众", "标致", "奔驰", "宝马"]
}
}
Vous pouvez définir des valeurs par défaut pour les paramètres dans le modèle. Si le paramètre n'est pas transmis lors de l'appel, la valeur par défaut sera utilisée. Par exemple:
GET index_name/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}
Afin de réutiliser le modèle, nous pouvons le sauvegarder dans Elasticsearch. En spécifiant le nom du modèle, il est pratique de l'appeler à plusieurs reprises par la suite. Par exemple:
POST _scripts/my_test_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"field_name": "{{kw}}"
}
}
}
}
}
Lors de l'appel du modèle, transmettezid
Pour spécifier un modèle spécifique et transmettre les paramètres correspondants. Par exemple:
GET index_name/_search/template
{
"id": "my_test_template",
"params": {
"kw": "自定义template的参数值"
}
}
Les informations de modèle définies peuvent être interrogées via des requêtes GET, par exemple :
GET _scripts/my_test_template
Si vous devez supprimer un modèle défini, vous pouvez utiliser une requête DELETE, par exemple :
DELETE _scripts/my_test_template
Elasticsearch fournit_render/template
API pour valider le modèle.