En plus de la correspondance complète des jetons, les index de recherche Spanner sont compatibles avec les recherches de sous-chaînes. Cette page explique comment effectuer une recherche de sous-chaîne dans le cadre d'une recherche en texte intégral dans Spanner.
Les recherches de sous-chaînes présentent les caractéristiques suivantes :
- Non sensible à la casse, supprime la plupart des signes de ponctuation et normalise les espaces.
- Aucune segmentation en chinois, japonais ou coréen (CJK), car les requêtes CJK partielles sont souvent segmentées de manière incorrecte.
- Pour plusieurs termes de recherche, le résultat doit contenir une sous-chaîne de chaque terme. Par exemple,
'happ momen'correspond à"happy moment", car les deux sous-chaînes se trouvent dans le texte. Il ne correspond pas à"happy day".
Exemples
| Texte stocké | Requête de sous-chaîne | Correspondance |
|---|---|---|
| Bridge over Troubled Water | ridg roub | Oui |
| Bridge over Troubled Water | ridg , roub | Oui |
| Bridge over Troubled Water | pont supérieur | Oui |
| Bridge over Troubled Water | pont ate | Oui |
| Bridge over Troubled Water | Bridge bridge bridge | Oui |
| Bridge over Troubled Water | bri trou ter | Oui |
| Bridge over Troubled Water | bri dge | Oui |
| Bridge over Troubled Water | troubledwater | Non |
| Bridge over Troubled Water | trubled | Non |
Pour une recherche de sous-chaîne, utilisez la fonction TOKENIZE_SUBSTRING dans la définition de la colonne TOKENLIST, comme illustré dans l'exemple de LDD suivant :
GoogleSQL
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);
PostgreSQL
Cet exemple utilise spanner.tokenize_substring.
CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));
CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);
Dans la requête SQL, utilisez la fonction SEARCH_SUBSTRING dans la clause WHERE. Par exemple, la requête suivante correspond à un album dont le titre est "happy" dans la table créée dans l'exemple précédent :
GoogleSQL
SELECT AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
Cet exemple utilise spanner.search_substring.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING génère des n-grammes pour chaque jeton et les stocke dans l'index de recherche. La longueur minimale et maximale des n-grammes à générer est configurée à l'aide d'arguments facultatifs.
Les index de recherche de sous-chaîne peuvent utiliser 10 à 30 fois plus d'espace de stockage que les index de texte intégral pour les mêmes données, car la tokenisation produit beaucoup plus de jetons. C'est d'autant plus vrai que la différence entre ngram_size_min et ngram_size_max augmente. Les requêtes de sous-chaîne utilisent également plus de ressources pour s'exécuter.
Comme pour TOKENIZE_FULLTEXT, vous pouvez configurer TOKENIZE_SUBSTRING pour qu'il utilise des types de contenus spécifiques.
Activer une recherche de sous-chaîne relative
En plus de la recherche de sous-chaîne de base, SEARCH_SUBSTRING est compatible avec le mode de recherche relative. Une recherche relative affine les résultats de la recherche de sous-chaîne.
Pour activer le mode de recherche relative, définissez le paramètre relative_search_types de TOKENIZE_SUBSTRING sur un tableau non vide avec des éléments de types de recherche relative compatibles.
Lorsque la recherche relative est activée dans la tokenisation, SEARCH_SUBSTRING peut effectuer des requêtes avec les types de recherche relative suivants :
phrase: correspond aux sous-chaînes contiguësExemples
Texte stocké Requête de sous-chaîne. Correspondance Bridge over Troubled Water pont au-dessus Oui Bridge over Troubled Water Bridge bridge bridge Non Bridge over Troubled Water brid over Non Bridge over Troubled Water crête au-dessus du problème Oui Bridge over Troubled Water bridge ove troubled Non Bridge over Troubled Water idge ove Oui Bridge over Troubled Water idge , ove Oui Bridge over Troubled Water RIDGE OVE Oui Bridge over Troubled Water eau de pont Non value_prefix: correspond aux sous-chaînes contiguës et la correspondance doit commencer au début de la valeur. Le concept est similaire à celui de la fonctionSTARTS_WITHpour les chaînes normalisées en termes de casse et d'espaces.Exemples
Texte stocké Requête de sous-chaîne Correspondance Bridge over Troubled Water pont au-dessus Oui Bridge over Troubled Water pont , terminé Oui Bridge over Troubled Water crête au-dessus Non Bridge over Troubled Water eaux troubles Non value_suffix: correspond aux sous-chaînes contiguës et la correspondance doit correspondre à la fin de la valeur. Le concept est similaire à celui de la fonctionENDS_WITHpour les chaînes normalisées en termes de casse et d'espaces.Exemples
Texte stocké Requête de sous-chaîne. Correspondance Bridge over Troubled Water eaux troubles Oui Bridge over Troubled Water eaux troubles Oui Bridge over Troubled Water eau trouble Oui Bridge over Troubled Water eaux troubles Non Bridge over Troubled Water eaux troubles Non Bridge over Troubled Water pont au-dessus Non word_prefix:commevalue_prefix, mais la chaîne doit correspondre à une limite de terme (plutôt qu'à une limite de valeur).Exemples
Texte stocké Requête de sous-chaîne Correspondance Bridge over Troubled Water over trouble Oui Bridge over Troubled Water Plus de , problèmes Oui Bridge over Troubled Water eau trouble Non Bridge over Troubled Water au-dessus de l'eau Non Bridge over Troubled Water ove troubled Non Bridge over Troubled Water ver troubled Oui word_suffix: commevalue_suffix, mais la chaîne doit correspondre à la fin d'une limite de terme.Exemples
Texte stocké Requête de sous-chaîne Correspondance Bridge over Troubled Water ver troubled Oui Bridge over Troubled Water over trouble Non Bridge over Troubled Water au-dessus de l'eau Non Bridge over Troubled Water ove troubled Non
Étapes suivantes
- En savoir plus sur les requêtes de recherche en texte intégral
- Découvrez comment classer les résultats de recherche.
- Découvrez comment paginer les résultats de recherche.
- Découvrez comment combiner des requêtes en texte intégral et non textuelles.
- Découvrez comment effectuer des recherches dans plusieurs colonnes.