Une requête Exists, également appelée requête NULL ou requête de valeur NULL, permet de déterminer si une colonne existe dans des données éparses. Par exemple, vous pouvez rechercher les lignes dont la valeur de la colonne address n'est pas vide.
Pour vérifier si une colonne contient des valeurs vides, utilisez ExistsQuery conjointement avec les requêtes must_not de BoolQuery.
-
Le système considère qu'une colonne n'existe pas si l'une des conditions suivantes est remplie. Dans cet exemple, la colonne city est utilisée.
Le type de la colonne city dans l'index de recherche est un type de base tel que keyword. Si une ligne ne contient pas la colonne city dans la table de données, l'index de recherche considère que la colonne city n'existe pas.
Le type de la colonne city dans l'index de recherche est un type de base tel que keyword. Si une ligne contient un tableau vide pour la colonne city dans la table de données (« city » = « [] »), l'index de recherche considère que la colonne city n'existe pas.
Prérequis
Initialisez une instance OTSClient. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Créez une table de données et écrivez-y des données. Pour plus d'informations, consultez les rubriques Créer une table de données et Écrire des données.
Créez un index de recherche pour la table de données. Pour plus d'informations, consultez la rubrique Créer un index de recherche.
Paramètres
|
Paramètre |
Description |
|
table_name |
Nom de la table de données. |
|
index_name |
Nom de l'index de recherche. |
|
field_name |
Nom de la colonne à interroger. |
|
query_type |
Type de requête. Définissez le type de requête sur QueryTypeConst::EXISTS_QUERY. Remarque
Vous ne pouvez pas interroger directement les colonnes imbriquées. Pour interroger une colonne imbriquée, encapsulez NestedQuery en spécifiant le chemin d'accès de la colonne imbriquée et une sous-requête. La sous-requête peut être de n'importe quel type. Pour plus d'informations, consultez la rubrique Requête imbriquée. |
Exemples
Cette section présente des exemples de requête Exists.
Interroger les lignes non vides dans la colonne text
L'exemple de code suivant montre comment interroger les lignes non vides dans la colonne text d'une table.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::EXISTS_QUERY,
'query' => array(
'field_name' => 'text'
)
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long', 'array')
)
);
$response = $otsClient->search($request);
Interroger les lignes non vides dans une sous-colonne d'une colonne imbriquée
L'exemple de code suivant montre comment interroger les lignes non vides dans la sous-colonne nested_long d'une colonne imbriquée d'une table.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::NESTED_QUERY,
'query' => array(
'path' => "nested",
'query' => array(
'query_type' => QueryTypeConst::EXISTS_QUERY,
'query' => array(
'field_name' => 'nested.nested_long',
)
),
'score_mode' => ScoreModeConst::SCORE_MODE_AVG
)
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('nested')
)
);
$response = $this->otsClient->search($request);
FAQ
Références
-
Lorsque vous utilisez un index de recherche pour interroger des données, vous pouvez recourir aux méthodes de requête suivantes : requête term, requête terms, requête match all, requête match, requête match phrase, requête prefix, requête range, requête wildcard, requête booléenne, requête geo, requête imbriquée et requête exists. Vous pouvez utiliser différentes méthodes de requête pour interroger des données selon plusieurs dimensions en fonction de vos besoins métier.
Si vous souhaitez trier ou paginer les lignes qui répondent aux conditions de requête, utilisez la fonctionnalité de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.
Si vous souhaitez regrouper l'ensemble de résultats en fonction d'une colonne spécifique, utilisez la fonctionnalité de regroupement (distinct). Ainsi, les données du type spécifié n'apparaissent qu'une seule fois dans les résultats de la requête. Pour plus d'informations, consultez la rubrique Regroupement (distinct).
Si vous souhaitez analyser les données d'une table de données, par exemple pour obtenir les valeurs extrêmes, la somme et le nombre total de lignes, effectuez des opérations d'agrégation ou exécutez des instructions SQL. Pour plus d'informations, consultez les rubriques Agrégation et Requête SQL.
Si vous souhaitez obtenir rapidement toutes les lignes qui répondent aux conditions de requête sans avoir besoin de les trier, appelez les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la rubrique Analyse parallèle.