Bonjour à tous,
Je travail sur un moteur de recherche sous Oracle de données d'une entreprise.
Toutes les données sont reliées entre elles et le but est de rechercher des objets, de voir à quels autres objets un objet est relié et d'effectuer des actions
Donc voici ou nous en sommes :
Il y a 2 tables principales
OBJ_INDEXES : contient tous les objets indexés. Il y a 7 champs indexés
OBJ_LINKS : contient les liens entre les objets
La question qu'on se pose concerne OBJ_INDEXES : il y a plusieurs pistes et j'aimerais avoir votre avis.
Pour chaque objet on a trié les informations sur chaque objet en 3 groupes de pertinence. 1 important, 2 moyen, 3 bas
Par exemple pour un employé :
Nom + Prénom : 1
Adresse : 2
Date d'engagement : 3
A cela on ajoute les ID. Si on entre un ID d'un dossier ou d'un employé, il doit apparaitre en 1ier
Ensuite nous avons les liens qui entrent en jeu. Un employé travail sur des dossiers. Donc si un dossier s'intitule "Hello project". Un utilisateur tape "project" le dossier doit apparaitre mais également l'employé dans les premiers résultats. Pour cela l'idée est la suivante
Pour chaque OBJ j'ai donc
ID
INDEX_1 : contient les info pertinentes sur l'obj NIv1
INDEX_2 : contient les info pertinentes sur l'obj NIV2
INDEX_3 : contient les info pertinentes sur l'obj NIV3
+
INDEX_1B : contient la concaténation des INDEX_1 des OBJ lié à lui via OBJ_LINKS
INDEX_2B : contient la concaténation des INDEX_2 des OBJ lié à lui via OBJ_LINKS
(Pour certains objets on limite car sinon c'est trop gros)
Pour résumer ma question :
Comment rechercher efficacement dans une table sur 7 colonnes ayant des pondérations différentes dans le calcul d'un scoring ?
Nous avons des intermedia index avec quelques optimisations fuzzy
Voici ce que nous avons pour le moment. On a concaténé index1 2 3 dans un seul champs... car quand on attaque 3 colonnes en même temps les peformances chuttent fortement
Merci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT k.xml_params, k.c_obj_type, k.id_index_object FROM OBJ_INDEXES k WHERE contains(k.l_index_123,fnc$analyze_transform_l_search (l_search_string),1) > 0 ORDER BY SCORE(1) DESC
Vodnok
Partager