Bonjour.
Voici mon problème.
J'ai un bean "Article" qui est rattaché à un bean "Revue". Ma recherche hibernate search par approximation s'effectue sur 2 champs de Article (titre et issn). Jusque là tout va bien.
Le problème, c'est que j'aimerais limiter le nombre de résultats, en requêtant par exemple sur les revues dont l'année de publication est comprise entre deux valeurs (en gros, requête du type 2000 <= revue.annee <= 2010).
Je voudrais donc savoir comment ajouter à la requête portant sur le bean Article (org.apache.lucene.search.BooleanQuery) les critères fixes relatifs au bean Revue.
Voici grosso-modo le code à compléter:
J'espère que quelqu'un saura m'aider. Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 /* ****************************** */ /* Code de la DAO du bean Article */ /* ****************************** */ public List<Article> getAll(final ArticleHibernateSearchCriteria crit) { List<Article> results = new ArrayList<Article>(); final FullTextEntityManager fullTextEntityManager = this.getFullEntityManager(); // Query globale. final BooleanQuery finalQuery = new BooleanQuery(); // Ajout de la partie relative aux articles. this.addArticleQueryPart(crit, fullTextEntityManager, finalQuery); // Ajout de la partie relative aux revues. -> pose problème this.addRevueQueryPart(crit, fullTextEntityManager, finalQuery); // Exécution de la requête et récupération des résultats. final javax.persistence.Query persistenceQuery = fullTextEntityManager.createFullTextQuery(finalQuery, Article.class, Revue.class); results = persistenceQuery.getResultList(); return results; } private void addArticleQueryPart(final ArticleHibernateSearchCriteria crit, final FullTextEntityManager fullTextEntityManager, final BooleanQuery finalQuery) { // Ajout des différents éléments de la recherche sur Article dans la query finalQuery. // Fonctionne bien. } private void addRevueQueryPart(final ArticleHibernateSearchCriteria crit, final FullTextEntityManager fullTextEntityManager, final BooleanQuery finalQuery) { // Ajout des différents éléments de la recherche sur Revue dans la query finalQuery. final Analyzer analyzer = fullTextEntityManager.getSearchFactory().getAnalyzer(Revue.class); // Année. final MultiFieldQueryParser parser = this.getQueryParserFactory().create(new String[] {"annee" }, analyzer); // requête sur le champ Revue.annee // QUE METTRE ICI POUR FAIRE L'EQUIVALENT DE // 2000 <= revue.annee <= 2010 // ?? finalQuery.add(query, Occur.MUST); }
Partager