Effectuer une recherche de sous-chaîne

En plus de la correspondance complète des jetons, les index de recherche Spanner acceptent 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îne présentent les caractéristiques suivantes:

  • Il n'est pas 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 mal segmentées.
  • 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 pontage Oui
Bridge over Troubled Water pont ATE Oui
Bridge over Troubled Water Pont pont pont 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:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

Dans la requête SQL, utilisez la fonction SEARCH_SUBSTRING dans la clause WHERE. Par exemple, la requête suivante correspond à un album intitulé "happy" dans la table créée dans l'exemple précédent:

SELECT Album
FROM Albums
WHERE 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 via des arguments facultatifs.

Les index de recherche par 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 particulièrement vrai si 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 TOKENIZE_FULLTEXT, vous pouvez configurer TOKENIZE_SUBSTRING pour utiliser des types de contenu spécifiques.

En plus de la recherche de sous-chaîne de base, SEARCH_SUBSTRING est compatible avec le mode de recherche relatif. Une recherche relative affine les résultats de recherche de sous-chaîne.

Pour activer le mode de recherche relative, définissez le paramètre TOKENIZE_SUBSTRING relative_search_types sur "TRUE".

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ës

    Exemples

    Texte stocké Requête de sous-chaîne. Correspondance
    Bridge over Troubled Water pont Oui
    Bridge over Troubled Water Pont pont pont Non
    Bridge over Troubled Water brid over Non
    Bridge over Troubled Water surmonter les difficultés 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 RIDEAU 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. Cette opération est conceptuellement similaire à la fonction STARTS_WITH pour les chaînes normalisées en majuscules et en espaces.

    Exemples

    Texte stocké Requête de sous-chaîne Correspondance
    Bridge over Troubled Water pont Oui
    Bridge over Troubled Water pont , au-dessus Oui
    Bridge over Troubled Water crête Non
    Bridge over Troubled Water eau trouble Non
  • value_suffix: correspond aux sous-chaînes contiguës, et la correspondance doit se produire à la fin de la valeur. Cette opération est conceptuellement semblable à la fonction ENDS_WITH pour les chaînes normalisées en majuscules et en espaces.

    Exemples

    Texte stocké Requête de sous-chaîne. Correspondance
    Bridge over Troubled Water eau trouble Oui
    Bridge over Troubled Water eau trouble Oui
    Bridge over Troubled Water eau trouble Oui
    Bridge over Troubled Water eau trouble Non
    Bridge over Troubled Water eau trouble Non
    Bridge over Troubled Water pont Non
  • word_prefix: comme value_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 sur les problèmes Oui
    Bridge over Troubled Water Plus de , problème Oui
    Bridge over Troubled Water eau trouble Non
    Bridge over Troubled Water sur l'eau Non
    Bridge over Troubled Water ov Non
    Bridge over Troubled Water ver troubled Oui
  • word_suffix: comme value_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 sur les problèmes Non
    Bridge over Troubled Water sur l'eau Non
    Bridge over Troubled Water ov Non

Étape suivante