L'extension RUM ajoute des informations de position et d'horodatage aux index de recherche en texte intégral de PostgreSQL, éliminant ainsi les analyses supplémentaires du tas qui ralentissent le classement, la recherche d'expressions et le tri par horodatage.
Prérequis
Avant de commencer, assurez-vous que :
L'instance RDS exécute PostgreSQL 10 ou une version ultérieure.
Si l'instance exécute PostgreSQL 14 ou PostgreSQL 15, la version mineure du moteur doit être 20221030 ou ultérieure. Pour plus d'informations, consultez Mettre à jour la version mineure du moteur d'une instance ApsaraDB RDS for PostgreSQL
Limitations de GIN et solutions apportées par RUM
L'index inversé généralisé (GIN) prend en charge la recherche en texte intégral à l'aide des types tsvector et tsquery, mais il ne stocke pas les informations de position ni d'horodatage dans ses index. Cela entraîne trois problèmes de performance :
| Limitation de GIN | Impact |
|---|---|
| Les emplacements des mots ne sont pas stockés | Le classement nécessite une analyse supplémentaire du tas après l'analyse de l'index pour récupérer les positions des lexèmes. |
| Les emplacements des mots ne sont pas stockés | La recherche d'expressions nécessite une analyse supplémentaire du tas pour vérifier les limites des expressions. |
| Les informations d'horodatage ne sont pas stockées | Le tri par horodatage nécessite une analyse supplémentaire du tas, car les index basés sur les morphèmes ne stockent pas les informations associées. |
RUM résout ces trois problèmes en stockant directement les emplacements des mots et les informations d'horodatage dans l'index, ce qui évite toute analyse supplémentaire du tas pour le classement, la recherche d'expressions ou le tri par horodatage.
La création et l'insertion des index RUM prennent plus de temps que celles des index GIN. RUM génère des index basés sur la journalisation préalable à l'écriture (WAL) et stocke plus d'informations par entrée que GIN.
Activer ou désactiver l'extension
Activez l'extension :
CREATE EXTENSION rum;
Désactivez l'extension :
DROP EXTENSION rum;
Opérateurs
L'extension RUM fournit les opérateurs suivants :
| Opérateur | Renvoie | Description | |
|---|---|---|---|
tsvector <=> tsquery |
float4 | Renvoie la distance entre une valeur tsvector et une valeur tsquery. |
|
timestamp <=> timestamp |
float8 | Renvoie la distance entre deux horodatages. | |
`timestamp <= |
timestamp` | float8 |
Renvoie uniquement la distance vers l'horodatage de gauche. |
`timestamp |
=> timestamp` | float8 |
Renvoie uniquement la distance vers l'horodatage de droite. |
Les trois derniers opérateurs fonctionnent également avec les types suivants : timestamptz, int2, int4, int8, float4, float8, money et oid.
Références
L'extension RUM s'utilise de la même manière que l'extension open source. Pour la référence complète des fonctions et des exemples supplémentaires, consultez la documentation de l'extension RUM.