PostgreSQL Parser de recherche de texte en utilisant l'analyse des limites de l'USI
La première étape de la recherche en texte intégral est l'analyse - le document de rupture et les textes de requête en jetons individuels (mots distincts, nombres, etc.). Cependant, il y a des langues où cette tâche n'est pas si triviale. L'exemple le plus important est les langues d'Asie de l'Est (comme le chinois, le japonais, le coréen et plus) - où les mots ne sont généralement pas séparés par l'espace et la ponctuation. Un autre exemple est l'hébreu; Bien que les mots soient séparés par ponctuation, certains personnages peuvent être considérés comme des marques de ponctuation ou ne pas en fonction du contexte.
L'analyseur par défaut inclus avec le sous-système de recherche de texte intégral de PostgreSQL fournit des résultats plutôt insatisfaisants dans ces cas. pg_icu_parser est une extension qui fournit une implémentation de l'analyse de recherche de texte intégral personnalisée qui utilise des routines d'analyse des limites de mot USI pour extraire les jetons à partir du texte source. Ceux-ci implémentent les algorithmes spécifiés à l'annexe 29 de la norme Unicode et peuvent fournir des résultats raisonnables dans de nombreuses langues.
Actuellement, pg_icu_parser doit être construit à partir du code source. Assurez-vous d'avoir des fichiers de support de développement (en-têtes, etc.) pour PostgreSQL disponibles.
Pour construire et installer, exécuter:
$ make install
Cela s'accumulera contre et s'installe dans l'installation de PostgreSQL déterminée par la première instance de pg_config trouvée dans le chemin actuel. Pour cibler une installation spécifique (ou une non dans le chemin):
$ make install PG_CONFIG=/path/to/pg_config
L'extension est également disponible en PGXN.
Pour charger l'extension dans une base de données, exécutez la commande SQL suivante en tant qu'utilisateur avec des autorisations appropriées:
CREATE EXTENSION pg_icu_parser;Cela enregistrera l'analyseur de texte personnalisé dans le schéma actuel. Pour l'utiliser, une configuration de recherche de texte doit être créée comme décrit dans le manuel PostgreSQL. Par exemple:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; Les types de jetons qui peuvent être émis par l'analyseur sont word , number , kana , ideo et blank - ceux-ci s'alignent avec les étiquettes de rukage de mots prises en charge par les soins intensifs. Il n'y a aucune restriction quant aux dictionnaires qui peuvent être utilisés.
pg_icu_parser expose un paramètre de configuration unique:
pg_icu_parser.locale - String, facultatif. Le lieu des soins intensifs à utiliser avec les routines d'analyse des limites. Si ce n'est pas défini, par défaut vers en . En règle générale, il n'est pas nécessaire de définir ce paramètre, car il n'y a pas de règles de détection des limites de mot qui sont sensibles aux paramètres régionaux. Comme décrit ci-dessus, la principale force de pg_icu_parser par rapport à l'analyseur default déjà intégré à PostgreSQL est les meilleurs résultats de tokenisation dans diverses langues. De plus, pg_icu_parser ne dépend pas du paramètre des paramètres régionaux de la base de données ou du système d'exploitation sous-jacent pour déterminer ce qu'est une lettre.
Cependant, il existe plusieurs compromis pour savoir ce qui peut avoir un impact sur la décision de savoir si pg_icu_parser est approprié pour un cas d'utilisation particulier:
L'analyseur par défaut peut reconnaître une grande variété de modèles en tant que jetons, y compris les URL, les adresses e-mail, divers types distincts de valeurs numériques, etc. pg_icu_parser d'autre part, a beaucoup moins de types de jetons (et les quelques-uns pris en charge sont beaucoup plus gros), et ne peuvent détecter aucun modèle complexe.
Pour le moment, pg_icu_parser ne prend pas en charge la fonction ts_headline . Peut-être dans le futur ...
pg_icu_parser est beaucoup plus lent que l'analyseur default . Cependant, si le codage du serveur de la base de données est UTF-8, un chemin rapide est utilisé, ce qui réduit la surcharge. Voir la section de référence ci-dessous.
En tant qu'extension tierce, pg_icu_parser ne peut être utilisée que lorsque le contrôle complet de l'installation de PostgreSQL est disponible; Autrement dit, il ne peut probablement pas être utilisé avec des solutions postgresql gérées.
La référence non scientifique suivante peut donner une idée de la quantité de ralentissement que l'on pourrait attendre de l'utilisation pg_icu_parser au lieu de l'analyseur par défaut. Le scénario testé est une requête pour compter le nombre de jetons non verbaux dans chaque document dans un corpus. Le corpus utilisé est le corpus Haaretz, composé de 27 139 articles de langue hébraïque courts. Les valeurs sont le temps d'exécution moyen en millisecondes de 10 tours, comme indiqué par EXPLAIN ANALYZE :
| Encodage du serveur | default | pg_icu_parser | Ralentir |
|---|---|---|---|
| UTF-8 | 2 566,9974 | 2 884,3696 | -12,3% |
| ISO-8859-8 | 3 529,6487 | 5 059,3616 | -43,3% |
Bien sûr, différents environnements et différents corpus peuvent avoir des résultats différents, YMMV.
pg_icu_parser est sous licence en vertu de la Licence publique Mozilla 2.0.