En plus d'indexer du texte, le index de recherche fournit une efficace d'indexer des nombres. Il est principalement utilisé pour augmenter des requêtes de recherche en texte intégral avec des conditions sur les champs numériques. Cette page décrit l'indexation des nombres pour l'égalité et d'inégalité, et l'indexation d'un tableau de nombres.
Tokeniser des nombres
La fonction TOKENIZE_NUMBER
permet de créer un index numérique. Pour en savoir plus,
consultez TOKENIZE_NUMBER
.
Numéros d'index pour les requêtes d'égalité et d'inégalité
Spanner accepte l'indexation des nombres pour l'égalité et l'inégalité.
Les recherches d'égalité correspondent à un nombre. Les recherches de plages et d'inégalités correspondent à un nombre
dans une plage spécifique. Vous définissez cette valeur dans le paramètre comparison_type
TOKENIZE_NUMBER
:
- Égalité :
comparison_type=>"equality"
- Inégalité et égalité :
comparison_type=>"all"
Dans les deux cas, le nombre d'origine (entier ou à virgule flottante) subit un processus de tokenisation, qui est conceptuellement semblable à la tokenisation du texte complet. Il génère un ensemble de jetons que la requête peut ensuite utiliser pour rechercher les documents correspondant à la condition numérique.
L'indexation par égalité ne produit qu'un seul jeton, qui représente le nombre. Ce
est recommandé si les requêtes ont uniquement des conditions au format field = @p
dans la clause WHERE
.
L'indexation des inégalités et des égalités peut accélérer un plus grand nombre de conditions dans la clause WHERE
de la requête. Cela inclut field < @p
, field <= @p
, field > @p
, field >= @p
, field BETWEEN @p1 and @p2
et field <> @p
, ainsi que les conditions d'égalité. Pour implémenter ce type d'indexation, Spanner génère des jetons dans l'index de recherche sous-jacent.
Spanner peut produire plusieurs jetons pour chaque nombre indexé,
en fonction des paramètres de réglage. Le nombre de jetons dépend des paramètres
définies pour TOKENIZE_NUMBER
, par exemple algorithm
, min
, max
et
granularity
Il est donc important d'évaluer attentivement les paramètres de réglage pour assurer un équilibre approprié entre le stockage sur disque et le temps de recherche.
Tokenisation de tableaux
En plus des valeurs scalaires, TOKENIZE_NUMBER
accepte la tokenisation d'un tableau de nombres.
Lorsque TOKENIZE_NUMBER
est utilisé avec la colonne ARRAY
, vous devez
spécifiez comparison_type=>"equality"
. Les requêtes de plage ne sont pas compatibles avec un
tableau de nombres.
Prenons l'exemple du schéma suivant:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Ratings ARRAY<INT64>,
Ratings_Tokens TOKENLIST
AS (TOKENIZE_NUMBER(Ratings, comparison_type=>"equality")) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Grades_Tokens);
La requête suivante recherche tous les albums ayant une note de 1 ou 2 :
SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ANY(Ratings, [1, 2])
La requête suivante recherche tous les albums ayant reçu une note de 1 et de 5 :
SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ALL(Ratings, [1, 5])
Étape suivante
- Découvrez la tokenisation et les tokenizers Spanner.
- En savoir plus sur les index de recherche
- Apprenez-en plus sur le partitionnement des index.