Position actuelle: Accueil> Derniers articles> Comment créer un tableau de champ de requête Elasticsearch à l'aide de la fonction Array_Column de PHP?

Comment créer un tableau de champ de requête Elasticsearch à l'aide de la fonction Array_Column de PHP?

M66 2025-05-11

Dans le développement réel, PHP offre beaucoup de fonctions de commodité pour traiter les tableaux, et la fonction Array_Column en fait partie. Array_Column peut nous aider à extraire une colonne dans un tableau bidimensionnel et renvoyer un nouveau tableau contenant les valeurs de cette colonne. La fonction Array_Column est très utile lors de la construction d'un tableau de champ de requête Elasticsearch.

Cet article présentera comment utiliser Array_Column pour construire un tableau de champ de requête Elasticsearch, en particulier comment extraire des champs spécifiques des données d'origine, afin que nous puissions construire davantage la requête Elasticsearch.

1. Quelle est la fonction Array_Column ?

Array_Column est une fonction intégrée en PHP qui extrait toutes les valeurs d'une colonne spécifiée à partir d'un tableau bidimensionnel et renvoie ces valeurs comme un nouveau tableau unidimensionnel. La syntaxe de base de cette fonction est la suivante:

 array_column(array $array, $column_key, $index_key = null): array
  • $ Array : le tableau multidimensionnel d'entrée.

  • $ Column_Key : le nom de clé de la colonne qui doit être extrait.

  • $ index_key : paramètre facultatif qui spécifie la colonne utilisée pour indexer le tableau de résultat (s'il n'est pas fourni, le tableau de résultat utilisera automatiquement l'index numérique).

2. Exemple: Construire un tableau de champ de requête Elasticsearch

Supposons que vous ayez un tableau bidimensionnel contenant des données de document, chaque document contient plusieurs champs tels que ID , nom , catégorie , etc.

2.1. Données brutes

Supposons que les données d'origine sont les suivantes:

 $documents = [
    ['id' => 1, 'name' => 'Apple', 'category' => 'Fruit', 'url' => 'http://example.com/apple'],
    ['id' => 2, 'name' => 'Carrot', 'category' => 'Vegetable', 'url' => 'http://example.com/carrot'],
    ['id' => 3, 'name' => 'Banana', 'category' => 'Fruit', 'url' => 'http://example.com/banana'],
    ['id' => 4, 'name' => 'Spinach', 'category' => 'Vegetable', 'url' => 'http://example.com/spinach']
];

2.2. Extraire le champ de catégorie à l'aide d' Array_Column

Nous pouvons utiliser la fonction Array_Column pour extraire tous les champs de catégorie et construire un tableau pour une utilisation facile dans Elasticsearch Query.

 $categories = array_column($documents, 'category');
print_r($categories);

Résultat de sortie:

 Array
(
    [0] => Fruit
    [1] => Vegetable
    [2] => Fruit
    [3] => Vegetable
)

2.3. Construisez un tableau de champ de requête Elasticsearch

Supposons que vous deviez construire une requête Elasticsearch basée sur le champ de catégorie pour trouver des documents appartenant à la catégorie des fruits . Vous pouvez faire ceci:

 $searchTerm = 'Fruit';
$query = [
    'query' => [
        'terms' => [
            'category' => array_column(
                array_filter($documents, function($doc) use ($searchTerm) {
                    return $doc['category'] === $searchTerm;
                }),
                'id'
            )
        ]
    ]
];

// Contenu de la requête imprimée
print_r($query);

Supposons que nous voulons interroger le document avec le fruit du champ de catégorie, Array_Filter filtrera d'abord tous les documents avec le fruit de la catégorie , puis utilisera Array_Column pour en extraire le champ ID et enfin construire un tableau de requête Elasticsearch.

Le tableau de requête de sortie peut ressembler à ceci:

 Array
(
    [query] => Array
        (
            [terms] => Array
                (
                    [category] => Array
                        (
                            [0] => 1
                            [1] => 3
                        )
                )
        )
)

3. Exemple de code complet

 <?php

$documents = [
    ['id' => 1, 'name' => 'Apple', 'category' => 'Fruit', 'url' => 'http://example.com/apple'],
    ['id' => 2, 'name' => 'Carrot', 'category' => 'Vegetable', 'url' => 'http://example.com/carrot'],
    ['id' => 3, 'name' => 'Banana', 'category' => 'Fruit', 'url' => 'http://example.com/banana'],
    ['id' => 4, 'name' => 'Spinach', 'category' => 'Vegetable', 'url' => 'http://example.com/spinach']
];

// utiliser array_column Extraire tout category Champs
$categories = array_column($documents, 'category');
print_r($categories);

// Construire Elasticsearch 查询Champs数组
$searchTerm = 'Fruit';
$query = [
    'query' => [
        'terms' => [
            'category' => array_column(
                array_filter($documents, function($doc) use ($searchTerm) {
                    return $doc['category'] === $searchTerm;
                }),
                'id'
            )
        ]
    ]
];

// Contenu de la requête imprimée
print_r($query);

?>

4. Résumé

La fonction Array_Column est très appropriée pour extraire des données d'un tableau multidimensionnel, en particulier lors de la création de requêtes Elasticsearch, qui peuvent extraire efficacement les champs dont nous avons besoin, nous aidant à construire le format de requête correct.

Si votre source de données contient une grande quantité de documents, l'utilisation de la fonction Array_Column peut considérablement améliorer la simplicité et la lisibilité du code, et peut également éviter efficacement les tracas de traverser manuellement le tableau.

En combinant d'autres fonctions de fonctionnement de la table (telles que Array_Filter ) et Array_Column , nous pouvons créer des tableaux de champ de requête complexes de manière flexible pour Elasticsearch pour répondre à différents besoins de requête.

J'espère que cet article vous aide! Si vous avez des questions ou si vous souhaitez en savoir plus sur les compétences en fonctionnement de PHP Array, n'hésitez pas à poser des questions!