Maison  >  Article  >  développement back-end  >  Étude approfondie de la syntaxe des requêtes Elasticsearch et du combat pratique

Étude approfondie de la syntaxe des requêtes Elasticsearch et du combat pratique

WBOY
WBOYoriginal
2023-10-03 08:42:22834parcourir

深入学习 Elasticsearch 查询语法与实战

Étude approfondie de la syntaxe et de la pratique des requêtes Elasticsearch

Introduction :
Elasticsearch est un moteur de recherche open source basé sur Lucene, principalement utilisé pour la recherche et l'analyse distribuées, et largement utilisé dans la recherche en texte intégral, l'analyse de journaux, et recommandation d'un système de données à grande échelle et d'autres scénarios. Lorsque vous utilisez Elasticsearch pour les requêtes de données, l'utilisation flexible de la syntaxe des requêtes est la clé pour améliorer l'efficacité des requêtes. Cet article approfondira la syntaxe des requêtes Elasticsearch et donnera des exemples de code détaillés basés sur des cas réels.

1. Présentation
La syntaxe de requête d'Elasticsearch utilise le format JSON, qui comprend principalement les instructions de requête, les conditions de filtrage, le tri, la pagination et d'autres fonctions. En combinant de manière flexible ces syntaxes, diverses requêtes de données complexes peuvent être mises en œuvre.

2. Instruction de requête

  1. Requête de correspondance :
    La requête de correspondance est la requête en texte intégral la plus basique, qui correspond aux résultats de la requête dans des champs spécifiés en fonction de mots-clés. L'exemple de code est le suivant :

    GET /index/_search
    {
      "query": {
     "match": {
       "field": "keyword"
     }
      }
    }
  2. Requête de terme :
    La requête de terme est utilisée pour faire correspondre avec précision la valeur du champ spécifié. L'exemple de code est le suivant :

    GET /index/_search
    {
      "query": {
     "term": {
       "field": "value"
     }
      }
    }
  3. Requête de plage :
    La requête de plage est utilisée pour interroger les valeurs dans la plage du champ spécifié. L'exemple de code est le suivant :

    GET /index/_search
    {
      "query": {
     "range": {
       "field": {
         "gte": "start value",
         "lte": "end value"
       }
     }
      }
    }
  4. Requête booléenne :
    La requête booléenne est utilisée pour combiner plusieurs conditions de requête et prend en charge les relations logiques telles que must, must_not, Should, etc. L'exemple de code est le suivant :

    GET /index/_search
    {
      "query": {
     "bool": {
       "must": [
         { "match": { "field1": "value1" } },
         { "match": { "field2": "value2" } }
       ],
       "must_not": { "term": { "field3": "value3" } },
       "should": { "term": { "field4": "value4" } }
     }
      }
    }

3. Conditions de filtre
Les conditions de filtre sont utilisées pour limiter la plage des résultats de la requête et réduire les calculs inutiles. Les conditions de filtrage couramment utilisées sont :

  1. Filtre à terme : filtre basé sur la valeur précise du champ.
  2. Filtre de plage : filtre basé sur la plage du champ.
  3. Filtre Exists : filtre selon que le champ existe ou non.
  4. Filtre booléen : combinez plusieurs conditions de filtrage.

4. Tri
Dans les résultats de la requête, nous pouvons trier en fonction de la valeur du champ spécifié. Les méthodes de tri couramment utilisées sont :

  1. Tri par champ : Trier en fonction de la valeur du champ spécifié.
  2. Tri des scores : Triez les documents en fonction de leur pertinence.

5. Pagination
Afin d'éviter de renvoyer trop de données à la fois, nous pouvons paginer les résultats de la requête. Les méthodes de pagination couramment utilisées sont :

  1. Page de pagination From/Size : spécifiez la position de départ et la quantité des résultats renvoyés via les paramètres from et size.
  2. Passage par défilement : utilisez l'API de défilement pour la pagination.

6. Cas pratique
Ce qui suit est un cas pratique pour montrer comment utiliser la syntaxe de requête d'Elasticsearch pour la requête de données.

Cas : Recherchez des mots-clés de produits sur les sites de commerce électronique et triez-les en fonction du volume des ventes et du prix.

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "手机" } }
      ]
    }
  },
  "sort": [
    { "sales": "desc" },
    { "price": "asc" }
  ]
}

Dans la requête ci-dessus, nous utilisons l'instruction match dans la requête booléenne pour rechercher des produits contenant « téléphone mobile » dans le nom du produit, et utilisons le paramètre de tri pour trier par volume de ventes par ordre décroissant et par prix par ordre croissant.

Conclusion :
Cet article propose une étude approfondie de la syntaxe de requête d'Elasticsearch et donne des exemples de code détaillés à travers des cas réels. L'utilisation flexible de cette syntaxe de requête peut améliorer l'efficacité et la précision de la requête de données. Dans les projets réels, nous pouvons utiliser différentes syntaxes de requête en combinaison en fonction de besoins spécifiques pour répondre à différents scénarios de requête de données.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn