|
Login
Search
Jalios Web Sites
Number of current visits
|
JCMS 5.7 : Développement de recherches étendues avec l'API des QueryFilter > Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Bonjour, j'ai branché mon queryFilter sur une portletSearch pour efffectuer une recherche vers une base de données externe. Cependant, j'apercois dans mes logs que JCMS rentre 6 fois dans la méthode filterResultSet. Pouvez-vous m'expliquer pourquoi ? Voilà le peu d'informations que j'ai obtenu : qh.getQueryString() : types=com.jalios.jcms.Content&sort=relevance qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@176ed77 qh.getQueryString() : types=generated.SmallNews&pstatus=0 qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@600a08 qh.getQueryString() : types=generated.WebPage&pstatus=0 qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@35ee49 qh.getQueryString() : types=generated.Forum&pstatus=0 qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@ce8e44 qh.getQueryString() : types=generated.Faq&pstatus=0 qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@127ffd7 qh.getQueryString() : types=generated.Glossary&pstatus=0 qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@1202afe Où dois-je spécifier que je veux uniquement rechercher dans cette DB et non pas une recherche standard sur Content et autres publications ? Sylvain Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Bonjour, Les QueryFilters sont branchés sur toutes les requetes (query) du site, ceci inclus notamment :
Vous devez donc ajouter une conditions avec votre QueryFilter pour n'executer votre code que lorsque vous êtes dans votre formulaire de recherche. Par exemple avec un champ caché.
Vous pouvez éditer le fichier log4j.xml et y activer les log de debug sur la classe Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Je pensais que la recherche était effectuée 6 fois par mon formulaire de recherche. En fait, j'ai sur ma page les portlets standards d'un JCMS, a savoir des remontées de : membre connecté, interviews, web page, forum, faq, glossaire. Donc elle est juste effectuée une fois par portlet répondant à la condition. J'avais bien mis un input caché dans mon formulaire (condition en question) pour rentrer ou pas dans ce filterResultSet spécifique (condition en amont comme pour la googleKey, avec test si l'objet request est non null, si ce dernier est null, je renvoie le set), mais ce champ étant posté, les autres portlets citées ci dessus étendent le périmètre de leur recherche à mon queryFilter.
public QueryResultSet filterResultSet(QueryHandler qh, QueryResultSet set, Map context) {
if (Util.isEmpty(qh.getRequest())) return set;
if (Util.isEmpty(qh.getRequest().getParameter(getSearchParam()))) return set;
// vide le set initial
set = new QueryResultSet();
Comment faire pour que si il y a d'autres portlets sur la page du formulaire de recherche, qu'elles n'étendent pas leur périmètre à cause du champ caché posté (posté globalement dans la requete). Donc comment en plus de poster le champ caché, le rattacher uniquement à ma portletSearch ? Merci Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Utilisez, si il en existe, les parametres du QueryHandler qui sont spécifiques aux recherches que vous devez traiter. En l'occurence, je pense que le parametre.=getTextSearch()= devrait suffir.
Autre solution, consultez les attributs de request pour y récupérer des informations contextuelles qui vont vous permettre de déterminer si vous devez ou non effectuer votre traitement. Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
En suivant mon raisonnement, je me suis dit que la portlet en question à l'origine de la recherche était une portletSearch, donc à chaque fois que j'arrive dans mon queryFilter, je sors si :
Cependant, je suis étonné de ce que je trouve dans les logs. Aucune recherche sur les 12 fois où je rentre dans mon queryFilter n'est appelée par une portletSearch. 11:50:53,515 DEBUG [Mon site] [QueryManager] - adc446 loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Interview] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,515 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,515 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Interview&pstatus=0 11:50:53,515 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_173 11:50:53,515 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:53,530 DEBUG [Mon site] [QueryManager] - 30e173 loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.SmallNews] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,530 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,530 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.SmallNews&pstatus=0 11:50:53,530 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_180 11:50:53,530 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:53,546 DEBUG [Mon site] [QueryManager] - 12164ea loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.WebPage] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.WebPage&pstatus=0 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_183 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:53,546 DEBUG [Mon site] [QueryManager] - 1687dcd loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Forum] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Forum&pstatus=0 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_181 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:53,546 DEBUG [Mon site] [QueryManager] - 11b456f loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Faq] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Faq&pstatus=0 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_185 11:50:53,546 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:53,562 DEBUG [Mon site] [QueryManager] - 16b7e0e loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Glossary] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:53,562 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:53,562 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Glossary&pstatus=0 11:50:53,562 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_184 11:50:53,562 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,484 DEBUG [Mon site] [QueryManager] - c2ccac loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[com.jalios.jcms.Content] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[] langs=[] wrkspc=[] hist=[null] sort=[relevance] 11:50:58,484 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,484 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=com.jalios.jcms.Content&sort=relevance 11:50:58,484 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletSelection id=j_179 11:50:58,484 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,484 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@1cb0a16 11:50:58,562 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,593 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 11:50:58,624 DEBUG [Mon site] [QueryManager] - 103368e loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.SmallNews] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.SmallNews&pstatus=0 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_180 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@1f2ae62 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,624 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 11:50:58,640 DEBUG [Mon site] [QueryManager] - 196c0a0 loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.WebPage] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.WebPage&pstatus=0 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_183 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@40578d 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,640 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 11:50:58,640 DEBUG [Mon site] [QueryManager] - 33f45e loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Forum] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:58,655 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,655 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Forum&pstatus=0 11:50:58,655 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_181 11:50:58,655 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,655 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@f04d94 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 11:50:58,687 DEBUG [Mon site] [QueryManager] - 94cc7 loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Faq] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Faq&pstatus=0 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_185 11:50:58,687 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,702 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@8fa0f0 11:50:58,702 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 11:50:58,718 DEBUG [Mon site] [QueryManager] - 18efa2f loggedMember=[Admin] text=[null] cids=[] mids=[] gids=[] types=[generated.Glossary] dateType=[] beginDate=[null] endDate=[null] catName=[false] ratings=[] pstatus=[0] langs=[] wrkspc=[] hist=[null] sort=[null] 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - --------------------------------------------------- 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getQueryString() : types=generated.Glossary&pstatus=0 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Type de portlet à l'origine de la query : class generated.PortletQueryForeachDetail id=j_184 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - box.getQuery() : pas portlet search ! 11:50:58,718 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - qh.getRequest() : org.apache.catalina.core.ApplicationHttpRequest@1cb4a6a 11:50:58,734 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Objet query lucene : TYPES:mission VILLES:tous 11:50:58,734 DEBUG [Mon site] [BapsiDbSearchQueryFilter] - Nombre de hits : 0 On voit ici que les 6 premières fois, la recherche n'est pas étendue à ma recherche spécifique, puis les 6 suivantes, la ligne "nombre de hits : 0" indique que la recherche a été effectuée. Dans tous les cas, le type de portlet à l'origine est soit :
Mes questions sont donc les suivantes :
D'avance merci, et désolé pour les logs quelques peu imposants, mais nécessaires à la compréhension de mes questions. Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Je serais bien d'accord avec vous pour en plus filtrer pour les portlets dont je sais qu'elles doivent effectuer cette recherche, mais ce qui me dérange, c'est qu'apparemment c'est la portletSelection qui l'effectue et non pas la portletSearch comme je l'aurais pensé. Quelle en est la raison ? Etant donné que j'avais déjà dupliqué query.jsp en maRechercheQuery.jsp, j'ai inséré les deux lignes suivantes à l'endroit où est lancée la query :
// do Query
request.setAttribute("persoQuery", true);
QueryResultSet queryResultSet = queryHandler.getResultSet();
request.removeAttribute("persoQuery");
Le résultat est concluant, mais dans les deux solutions (la votre en modifiant la propriété front/query.jsp), où la mienne en dupliquant la jsp, et en la déclarant "en dur" dans l'attribut 'action' du formulaire, je risque d'éventuels problèmes lors de futures migrations si le fonctionnement de la recherche JCMS est modifié. Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Nous sommes d'accors, mais l'attribut en question n'existant pas à l'heure actuelle, je n'ai pas d'autre solution à vous proposez. Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Et pour répondre à votre question sur la portlet selection et la portlet recherche : Re: Annuler la recherche sur les types de contenus JCMS au profil de la recherche sur une DB externe uniquement
Pour répondre à ce besoin, les méthodes suivantes seront disponible dans
|
|


