mardi 24 novembre 2009

STOP! On n'indexe pas ces mots

Les index d'Oracle Text peuvent être configurés afin d'exclure une liste de mots qui ne sont pas nécessaires d'être indexés tels que les articles, les pronoms, les adverbes, etc...

En excluant des mots non significatifs, les indexes deviennent moins volumineux et plus optimal lors de leurs utilisations.

Dans mon cas, j'utilise Oracle Portal et j'ai modifié les paramètres de certains index pour exclure une liste de mots français communément appelé une "stoplist" qui contient des "stopword".

Oracle fournit un script qui nous simplifie la vie. Ce script s'intitule "drdeffrc.sql". Il contient toutes les commandes nécessaires pour la mise en place de cette liste. Cependant, je n'ai pas tout exécuté.

Pour débuter, j'ai créé les préférences liées au "wordlist"

PROMPT Creating wordlist preference...
begin
CTX_DDL.drop_preference('DEFAULT_WORDLIST');
CTX_DDL.create_preference('DEFAULT_WORDLIST','BASIC_WORDLIST');
CTX_DDL.set_attribute('DEFAULT_WORDLIST','STEMMER', 'FRENCH');
CTX_DDL.set_attribute('DEFAULT_WORDLIST','FUZZY_MATCH', 'FRENCH');
end;
/

Ensuite, j'ai créé la "stoplist". Ceci correspond au plus long bloc PL/SQL du script. Avant de l'exécuter, j'ai ajouté la commande qui détruit la "stoplist" autrement, la création n'aurait pas fonctionné car elle existe. Voici une aperçu du bloc PL/SQL :

PROMPT Creating stoplist...
declare
db_charset VARCHAR2(500);

procedure add_utf8_stopword(hexstring in VARCHAR2) is
begin
CTX_DDL.add_stopword('DEFAULT_STOPLIST', UTL_RAW.cast_to_varchar2(
UTL_RAW.convert(HEXTORAW(hexstring), db_charset,
'AMERICAN_AMERICA.UTF8')));
end add_utf8_stopword;

begin
SELECT 'AMERICAN_AMERICA.' || value
INTO db_charset
FROM v$nls_parameters
WHERE parameter = 'NLS_CHARACTERSET';

ctx_ddl.drop_stoplist('DEFAULT_STOPLIST');
ctx_ddl.create_stoplist('DEFAULT_STOPLIST');
ctx_ddl.add_stopword('DEFAULT_STOPLIST','a');
ctx_ddl.add_stopword('DEFAULT_STOPLIST','afin');
...
ctx_ddl.add_stopword('DEFAULT_STOPLIST','vu');
ctx_ddl.add_stopword('DEFAULT_STOPLIST','y');
end;
/

Suite aux changements effectués, on doit rebâtir tous les index pour que tous nos changements soient en vigueur :

ALTER INDEX "PORTAL"."WWSBR_CORNER_CTX_INDX"
REBUILD PARAMETERS ('replace stoplist default_stoplist');

En cas de besoin, vous pouvez exécuter les scripts suivants pour

  • Créer tous les index Oracle Text de Portal : ORACLE_HOME/portal/admin/plsql/wws/ctxcrind.sql
  • Détruire tous les index Oracle Text de Portal : ORACLE_HOME/portal/admin/plsql/wws/ctxdrind.sql
  • Modifier les préférences : ORACLE_HOME/portal/admin/plsql/wws/sbrimtlx.sql

Aussi, sachez qu'il existe un package CTX_REPORT qui permet de vérifier la configuration. Par exemple, vous pouvez utiliser ces procédures :

  • CTX_REPORT.DESCRIBE_INDEX
  • CTX_REPORT.CREATE_INDEX_SCRIPT
  • CTX_REPORT.INDEX_SIZE

Et, comme à l'habitude, il y a une panoplie de vues dans le dictionnaire qui
vous fourniront les informations désirées, en voici quelques unes :

  • CTX_PREFERENCES
  • CTX_PARAMETERS
  • CTX_STOPLISTS
  • CTX_STOPWORDS
  • CTX_INDEXES
  • CTX_INDEX_ERRORS


Aucun commentaire:

Publier un commentaire