sdx-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE : [sdx-users] jointure sur plusieurs bases de documents


From: Martin Sevigny
Subject: RE : [sdx-users] jointure sur plusieurs bases de documents
Date: Wed, 30 Jul 2003 09:16:02 +0200

Bonjour,

> -Sur la premiere (metadatas) l'indexation, est effectuée sur 
> des metadatas qui sont renseignées au fur et a mesure 
> (d'où la necessité d'indexations successives pour garder la 
> coherence) 
> -Sur la seconde (text) l'indexation, est effectuée une seule 
> fois sur une seule metadata qui contient l'ensemble du texte 
> d'un livre. 
> Ce dispositif a été adopté pour eviter d'indexer plusieurs 
> fois des données qui ne changent pas, et dont les temps 
> d'indexation sont non negligeables.  

Pour des raisons de performance, c'est effectivement une solution
intéressante.

> Chaque document xml (representant un livre) est identifié 
> dans les 2 bases par un id qui est le sdxdocid. 
> Je souhaiterais interroger ces deux bases sur l'ensemble 
> des metadatas de maniere a effectuer une jointure sur le 
> sdxdocid, un peu de la maniere suivante:  
> Select b1.Auteur b1.titre from b1 metadatas, b2 text where 
> (b1.Titre ="20000 lieues sous les mers" And b2.Fulltext=" 
> capitaine nemo" And b1.sdxdocid=b2.sdxdocid) 

Je vois. Le problème, mais pas la solution!

> J'ai bien chercher du coté des complexQuery ou de 
> sdx:filter mais je ne vois vraiment pas comment m'y prendre 

Non, rien de ce côté.

> (a part effecuter les deux requetes et parser les deux 
> sdx:results ensuite.... ). 

C'est la seule chose qui me vient à l'esprit pour faire exactement ce
que vous chechez, mais ce ne sera pas efficace sur de grands ensembles
de résultats.

La limite, ici, c'est le modèle de recherche de SDX/Lucene. On cherche
dans des unités documentaires qui sont totalement indépendantes, il n'y
a pas de relations entre elles, qu'elles soient dans la même base ou
pas. Donc il n'y a pas de fonctionnalités permettant de faire ce que
vous recherchez.

Il peut y avoir une autre façon de truquer. Vous faites la recherche
dans une des deux bases. En Java, vous prenez le Results et vous allez
chercher tous les sdxdocid (en utilisant la méthode getDocIds() qui
retourne un String[]).

Ensuite vous construisez une nouvelle requête (complex), qui va chercher
dans l'autre base, structurée à peu près ainsi:

+(sdxdocid:[premier id] or sdxdocid:[second id] or ...) +(votre requête
originale)

Le seul problème, encore une fois, ce sont les performances. Si votre
premier résultat contient beaucoup de réponses, alors le getDocIds() ne
sera pas d'une efficacité redoutable, et la seconde requête va être très
longue et même peut-être excéder les limites du nombre de termes dans
une requête Lucene (à voir).

Mais sur de petits ensembles (quelques centaines?), c'est une piste à
explorer.

A bientôt,

Martin Sévigny





reply via email to

[Prev in Thread] Current Thread [Next in Thread]