Bonjour,
Etant nouveau sur ce forum, je ne sais pas si c'est le bon endroit pour ce post mais tant pis :p

La société pour laquelle je bosse a développé une application qui fait grosso modo de l'automatisation de
création de catalogue vpc, le tout, basée sur une base de données Oracle.
Pour faciliter la recherche des différents objets stockées dans la base, on utilisait précédemment un moteur
de recherche développé en interne, mais on souhaite passer sur un moteur de recherche basé sur Oracle Text.

Les documents stockés peuvent être recherchés par documentID, nom de document ou par annotations
positionnés sur ceux ci.

Exemple de recherche du document 'ImportSax2.c' :

1)recherche par nom, nous demandons a Oracle d'exécuter la recherche suivante :
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;
2)recherche standard, sans critère discriminant particulier :
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c' , 1 ) > 0;

Il faut environ 7 secondes a Oracle pour donner une réponse à la 2eme requête, alors qu'il lui en faut environ 50 pour
répondre à la première requête.

Ci dessous, une partie du script sql permettant la création de l'index Oracle text sur le champ OBJFIELDURL.
(ce champ stocke le chemin absolu sur le filesystem du fichier xml contenant l'ensemble des champs à indexer pour
un objet o donné).


begin
Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 200) ;
ctx_ddl.set_attribute('wildcard_pref','prefix_min_length',3);
ctx_ddl.set_attribute('wildcard_pref','prefix_max_length',6);
ctx_ddl.set_attribute('wildcard_pref','STEMMER','AUTO');
ctx_ddl.set_attribute('wildcard_pref','fuzzy_match','AUTO');
ctx_ddl.set_attribute('wildcard_pref','prefix_index','TRUE');
ctx_ddl.set_attribute('wildcard_pref','substring_index','TRUE');
end;
/

begin
ctx_ddl.create_preference('doc_lexer_perigee', 'BASIC_LEXER');
ctx_ddl.set_attribute('doc_lexer_perigee', 'printjoins', '_-');
ctx_ddl.set_attribute('doc_lexer_perigee', 'BASE_LETTER', 'YES');
ctx_ddl.set_attribute('doc_lexer_perigee','index_themes','yes');

ctx_ddl.create_preference('english_lexer','basic_lexer');
ctx_ddl.set_attribute('english_lexer','index_themes','yes');
ctx_ddl.set_attribute('english_lexer','theme_language','english');
ctx_ddl.set_attribute('english_lexer', 'printjoins', '_-');
ctx_ddl.set_attribute('english_lexer', 'BASE_LETTER', 'YES');

ctx_ddl.create_preference('german_lexer','basic_lexer');
ctx_ddl.set_attribute('german_lexer','composite','german');
ctx_ddl.set_attribute('german_lexer','alternate_spelling','GERMAN');
ctx_ddl.set_attribute('german_lexer','printjoins', '_-');
ctx_ddl.set_attribute('german_lexer', 'BASE_LETTER', 'YES');
ctx_ddl.set_attribute('german_lexer','NEW_GERMAN_SPELLING','YES');
ctx_ddl.set_attribute('german_lexer','OVERRIDE_BASE_LETTER','TRUE');


ctx_ddl.create_preference('japanese_lexer','JAPANESE_LEXER');

ctx_ddl.create_preference('global_lexer', 'multi_lexer');
ctx_ddl.add_sub_lexer('global_lexer','default','doc_lexer_perigee');
ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');
ctx_ddl.add_sub_lexer('global_lexer','english','english_lexer','en');
end;
/

begin
ctx_ddl.create_section_group('axmlgroup', 'AUTO_SECTION_GROUP');
end;
/


drop index ADSOBJ_XOBJFIELDURL force;
create index ADSOBJ_XOBJFIELDURL on ADSOBJ(OBJFIELDURL) indextype is ctxsys.context
parameters
('datastore ctxsys.file_datastore
filter ctxsys.inso_filter
sync (on commit)
lexer global_lexer
language column OBJFIELDURLLANG
charset column OBJFIELDURLCHARSET
format column OBJFIELDURLFORMAT
section group axmlgroup
Wordlist wildcard_pref
');

La table des mots Oracle text(DR$ADSOBJ_XOBJFIELDURL$I) comporte aujourd'hui environ 25 millions d'enregistrements.

ADSOBJ est la table stockant les champs de nos objets
Les fichiers xml de description des champs à indexer pour chaque objet sont formattés comme suit :
<?xml version="1.0" encoding="UTF-8" ?>
<fields>
<OBJNAME><![CDATA[NomLnk_177527o.jpgp]]></OBJNAME>
<OBJREM><![CDATA[Z_CARACT_141]]></OBJREM>
<OBJID>295926o.jpgp</OBJID>
</fields>
Dans le cas présent, on demande l'indexation du nom de l'objet, des commentaires positionnés sur l'objet, et l'identifiant
de l'objet.

Quelqu'un aurait il une idée de comment je peut faire pour augmenter les performances des recherches de type
"select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;"?

Voila, le post est un peu long mais j'ai préféré donner un max de détail pour faciliter la compréhension
de mon problème.

Merci d'avance.