Partage de technologie

Modèles de recherche Elasticsearch : réutiliser et partager des requêtes

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.

1. Pourquoi utiliser des modèles de recherche

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.

2. Cas introductif du modèle de recherche

2.1 Formulaire standard

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
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Dans cet exemple,{{kw}}et{{size}}est une variable dans le modèle, passéeparamsLes objets transmettent des valeurs spécifiques.

2.2 au format JSON

toJSONLa 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": "真正的数值"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.3 Passer des paramètres dans la méthode join

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": ["大众", "标致", "奔驰", "宝马"]
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.4 Formulaire de valeur par défaut

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
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3. Mémorisez le modèle et mettez en œuvre des appels répétés

3.1 Modèle de sauvegarde Elasticsearch

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}}"
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.2 Modèle d'appel

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的参数值"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.3 Interroger le modèle défini

Les informations de modèle définies peuvent être interrogées via des requêtes GET, par exemple :

GET _scripts/my_test_template
  • 1

3.4 Supprimer un modèle défini

Si vous devez supprimer un modèle défini, vous pouvez utiliser une requête DELETE, par exemple :

DELETE _scripts/my_test_template
  • 1

4. Application avancée des modèles de recherche

4.1 Modèle de vérification

Elasticsearch fournit_render/template API pour valider le modèle.