Bonjour,
Je suis en train de faire une recherche full texte avec HIBERNATE SEARCH.
Je veux faire une recherche full texte sur la propriete "value" de mon objet Itemdata
Code:
@Indexed
public class ItemData {
/**
* Item Data Id
*/
@DocumentId
protected long itemDataId;
/**
* Item data value
* The data collected for an item. This data is represented according to DataType
* attribute of the Item.
*/
@Field
protected String value;
/**
*
.........
}
Quand je vais faire cette recherche, je vais obtenir une liste de resultats :
Code:
List<Itemdata> results = hibQuery.list();
Parmi cette liste, je veux garder seulement les Itemdata qui sont accessible à l'utilisateur connecte.
Dans ma base de donnees, cela correspond à la requete suivante :
Code:
select idat.*
from itemdata idat, itemgroupdata igdat, formdata fdat, eventdata edat, subject sbj, sites si, study s,groups grp, groups_users grpu, user usr
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and igdat.FORM_DATA_ID=fdat.FORM_DATA_ID
and fdat.EVENT_DATA_ID=edat.EVENT_DATA_ID
and edat.SUBJECT_ID=sbj.SUBJECT_ID
and sbj.SITE_ID=si.SITE_ID
and sbj.PROJECT_ID=s.PROJECT_ID
and s.study_id=grp.study_id
and grp.group_id=grpu.group_id
and grpu.user_id=usr_id
and usr.site_id=sbj.site_id
and usr.user_id=234;
Comme vous pouvez voir la requete est complexe.
Si je veux implementer un filtre HIBERNATE SEARCH à partir de ma requete HIBERNATE SEARCH pour obtenir cette restriction, je ne vois pas comment faire.
D'apres ce que j'ai lu, les Filtres HIBERNATE SEARCH peuvent etre construit à partir des proprietes qui sont indexes par HIBERNATe SEARCH.
Par example selectionner les voitures rouges ou selectionner les voitures appartenant à un homme habitant Los Angeles.
Dans mon cas, cela reviendraitindexer toutes les relations entre Itemdata et User. C'est impossible.
Est-ceque quelqu'un a une idee comment construire un tel filtre ?
La meilleure solution serait peut-etre de recuperer par une requete de base de donne les Itemdata accesibles et de faire ensuite une intersection avec la liste obtenu avec HIBERNATE SEARCH ?
Si quelqu'un peut me venir en aide, merci.