We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Différence entre 2 queryhandlers

Thomas LEGAT · on 12/5/13 at 9:07 PM

Bonjour,

Quel est la différence entre ces 2 queryhandler: AllMemberQueryHandler et DBMemberQueryHandler?

Il est marqué dans la Javadoc que les 2 permettent de requêter sur des DBMembers. Quels sont les cas d'utilisation de l'un ou de l'autre?

Le MemberQueryHandler quand à lui permets de requêter sur des Member. Quel QueryHandler doit on utiliser lorsque nous souhaitons requêter sur des Membres et des DBMembres? Le "AllMemberQueryHandler" je suppose?

J'avais mis en place pour un développement un AllMemberQueryHandler mais les résultats retournés n'étaient pas corrects. Il me retournait des résultats supplémentaires qui n'avait aucun rapport avec la recherche. Ce qui n'est pas le cas avec le MemberQueryHandler. Je n'ai dans ma webapp que des Member et aucun DBMember. Les résultats supplémentaires ne sont donc pas des DBMembers.

D'où ma question sur ces 3 types de QueryHandler.

Merci d'avance,

13 pts
Olivier Jaquemet - on 12/6/13 at 8:57 AM
Best answer

Bonjour Thomas,

Les 3 différents QueryHandler qui existents pour les mebres ont chacun des usages et des limites différentes,

  • MemberQueryHandler : Recherche de membre JStore uniquement (Member)
  • DBMemberQueryHandler : Recherche de membre JcmsDB uniquement (DBMember)
  • AllMemberQueryHandler : Recherche mixte (Member et DBMember)

Ci-dessous une explication détaillée des fonctionnalités et limites des ces recherches

#1

Recherche de membre JStore uniquement (Member)

  • :
    • admin/memberList.jsp,
    • work/workspace/workspaceMemberList.jsp,
    • admin/memberChooser.jsp?jstore=true&jcmsdb=false
  • Comment : via le MemberQueryHandler, il s'agit d'une recherche en mémoire
  • Filtrages supportés :
    • groupes (gid, gids)
    • administrateur (admin)
    • contributeur (worker)
    • espace de travail (wrkspc)
    • usage (usage)
    • recherche textuelle (text), via un Member.TextSelector, recherche de chaine dans le nom complet, email, organization et département. Non sensible à la casse et aux accents.
  • Avantages :
    • Filtrage et pagination facile via l'API via manipulation de collection
  • Inconvénients :
    • pas de fonctionnalité textuelle avancé (wildcard, stop words, etc)
  • Hooks :
    • MemberQueryFilter.filterMemberQueryHandler(MemberQueryHandler, ...)
    • MemberQueryFilter.filterResultSet(...)

Recherche de membre JcmsDB uniquement (DBMember)

  • :
    • admin/dbmemberList.jsp,
    • work/workspace/workspaceDBMemberList.jsp (7.1.1),
    • admin/memberChooser.jsp?jstore=false&jcmsdb=true
  • Comment : via le DBMemberQueryHandler, il s'agit d'une recherche en base
  • Filtrages supportés :
    • groupes (gid, gids)
    • espace de travail (wrkspc)
    • recherche textuelle (text),
      Effectué via une requete SQL "like", sur les colonnes nom, prénom, email, et organization.
      Avant JCMS 7.0 SP4 et JCMS 7.1.2 (non compris), le texte entier est recherché dans chaque champ. Aucun découpage ou regexp.
      Un exemple de (pseudo) requete pour comprendre :
      SELECT * FROM DBMember WHERE (lastname Like "%mot1 mot2%" OR firstname LIKE "%mot1 mot2%" OR email LIKE "%mot1 mot2%");

      Depuis la version 7.0 SP4 et JCMS 7.1.2, l'évolution JCMS-3108 améliore ce comportement et recherche chaque mot individuellement :
      SELECT * FROM DBMember WHERE (lastname Like "%mot1%" OR firstname LIKE "%mot1%" OR ...) AND (lastname Like "%mot2%" OR firstname LIKE "%mot2%" OR ..);
    • Usage du membre (compte ou contact) usage), à partir de JCMS 7.1.2, l'évolution JCMS-3109
  • Avantage :
    • Volumétrie importante
  • Inconvénients :
    • pas de fonctionnalité textuelle avancé (wildcard, stop words, etc)
  • Hooks :
    • MemberQueryFilter.filterMemberQueryHandler(DBMemberQueryHandler, ...)
    • MemberQueryFilter.filterPageResult(DBMemberQueryHandler, ...)
    • MemberQueryFilter.filterResultList(DBMemberQueryHandler, ...)

Recherche mixte (Member et DBMember)

  • :
    • BackOffice via : admin/memberChooser.jsp?jstore=true&jcmsdb=true
    • FrontOffice via : portlet annuaire en front office
  • Comment : via le AllMemberQueryHandler, il s'agit d'une recherche lucene
  • Filtrages supportés :
    • groupes (gid, gids)
    • usage (usage)
    • email (email)
    • recherche textuelle (text), via une query lucene avec découpage et wildcard avancé
  • Avantage :
    • recherche mixte
    • fonctionnalités textuelles avancées de lucene
    • [JCMS9] recherche par téléphone
  • Inconvénients :
    • nombre de résultats limités (via propriété query.lucene.mbr.max-results dont la valeur par défaut est de 2000 résultats)
  • Hooks :
    • MemberQueryFilter.filterMemberQueryHandler(AllMemberQueryHandler, ...)
    • MemberQueryFilter.filterPageResult(AllMemberQueryHandler, ...)
    • MemberQueryFilter.filterResultList(AllMemberQueryHandler, ...)
    • LuceneSearchEnginePolicy.parse(...)
Olivier Jaquemet · on 12/6/13 at 8:58 AM
10 pts
Thomas LEGAT · on 12/6/13 at 9:35 AM

Merci Olivier pour cette très bonne explication sur les différences entre ces 3 Handlers.

Je suppose alors que la différence de résultats entre le MemberQueryHandler et le AllMemberQueryHandler que j'avais provenait du fait que la recherche avec AllMemberQueryHandler utilise des fonctionnalitées plus poussées de recherche (vu que dans mon cas, je n'ai pas de DBMember).

0 pts