[Lucene] Requête avec filtre sur nom du noeud parent

cancel
Showing results for 
Search instead for 
Did you mean: 
kpek
Member II

[Lucene] Requête avec filtre sur nom du noeud parent

Bonsoir,
Je suis en train de m'arracher les cheveux sur une requête Lucene. Je fais une recherche sur une ensemble de nœuds de type content (des fichiers pdf) qui se trouvent dans une arborescence du genre celle-ci :
BASE_DOCUMENTAIRE
    |-> TEST
      |-> TYPE_465_TOTO_10
        |->ficher pdf
        |->ficher pdf
        |->ficher xml
      |-> TYPE_443_TATA_15
        |->ficher pdf
        |->ficher xml
      |->TYPE_111_TOTO_15
        |->ficher pdf
        |->ficher xml
      |->TYPE_446_TITI_15
        |->ficher pdf
        |->ficher xml
Je récupère tous les fichiers PDF dont la date de création est comprise sur une période, cependant, j'aimerai filtrer aussi le répertoire parent. Par exemple ne récupérer que les fichiers dont le nœud parent contient le terme "TOTO".

J'ai parcouru le wiki sur la recherche Alfresco (http://wiki.alfresco.com/wiki/Search) sans grand résultat (beaucoup de pistes, mais rien au final) et j'ai cherché sur le net différentes façon de faire ma recherche (avec Lucene ou XPATH), mais toujours aucune solution.

J'en viens donc à ma question, est-ce bien faisable ?
7 Replies
jayjayecl
Active Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

C'est possible de plusieurs manières (PATH, XPATH, CMIS), et vous avez regardé la bonne page du wiki, pouvez-vous nous préciser ce qui n'a pas abouti ?
kpek
Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

J'ai oublié de préciser que je débute avec Alfresco.

Alors, voici en gros ce que j'ai pu tester :
=> Avec une requête lucene, en utilisant PATH :
PATH:"app:company_home/montest:base_documentaire/montest:test//*" AND TYPE:"cm:content" AND @cm\:name:*.pdf
Cela me renvois bien les fichier PDF, mais je n'arrive pas à filtrer sur le nœud parent. Voici ce que j'ai essayé pour filtrer avec le nom du parent :
PATH:"app:company_home/montest:base_documentaire/montest:test//montest:*toto*//*"
->Ceci ne fonctionne pas.

PATH:"app:company_home/montest:base_documentaire/montest:test//montest:%toto%//*"
->mon filtre sur "toto" est ignoré (j'ai essayé les % sans vraiment savoir si c'était un caractère clé pour lucene)

J'ai aussi essayé avec les mots clés PARENT et PRIMARYPARENT afin de filtrer le nœud parent en dehors de PATH, mais ils ne permettent visiblement que de filtrer sur l'ID du nœud.

Je suis revenue ce matin sur XPATH (dans le navigateur de nœud, j'ai choisi "selectnodes" en mode de recherche) :
app:company_home/montest:base_documentaire/montest:test//*[like(@cm:name, '*toto*')]//*[like(@cm:name, '%.pdf')]
Mais je coince sur le filtre de fichier pdf. Il est ignoré et je récupère tous les fichiers.

De plus, j'ai du mal a transcrire cette requête dans le PATH d'une requête lucene (en échappant les "[" et "]") car, je ne l'ai pas précisé, mais il me faut aussi filtrer sur une période de création des fichiers pdf (ce que j'ai pu faire en lucene).

J'espère ne pas être trop confus dans mon explication. J'avoue que je demande le moins possible d'aide car c'est en cherchant que l'ont apprend (mais ça prend du temps Smiley Sad).
jayjayecl
Active Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

Je me pose des questions quant aux espaces que vous auriez créés sous un éventuel QName ayant pour préfixe "montest" ?
Comment avez-vous créé vos espaces ? A quoi correspond le préfixe "montest" ?
Avez-vous navigué au sein du navigateur de noeuds pour vérifier les chemins ?
kpek
Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

J'ai renommé les noeud de l'arborescence. Celle-ci m'est imposée.
Par contre, je viens de m'apercevoir que les espaces en début de ligne sont supprimé sous phpbb, du coup, mon schéma d'arborescence ne correspond à rien. Voici comment il est (j'édite quand même mon premier post) :
BASE_DOCUMENTAIRE
    |-> TEST
      |-> 2010
        |-> 10
          |-> 29
            |-> TYPE_465_TOTO_10
              |->ficher pdf
              |->ficher pdf
              |->ficher xml
            |-> TYPE_443_TATA_15
              |->ficher pdf
              |->ficher xml
      |-> 2010
        |-> 11
          |-> 02
            |->TYPE_111_TOTO_15
              |->ficher pdf
              |->ficher xml
            |->TYPE_446_TITI_15
              |->ficher pdf
              |->ficher xml
Oui, je me suis beaucoup aidé du navigateur de nœud pour faire le PATH et comprendre l'organisation (j'ai aussi regardé la base MYSQL, mais si c'est sensé être une boite noire).
jayjayecl
Active Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

Ce qui m'interroge, ce sont les requêtes de la forme suivante (préfixe "montest") :

app:company_home/montest:base_documentaire/

Out Of the box, si vous créez un espace "base_documentaire" dans Alfresco via l'interface, son chemin sera :
app:company_home/cm:base_documentaire/
kpek
Member II

Re: [Lucene] Requête avec filtre sur nom du noeud parent

J'avoue que cela m'a fait galérer car je voyais le nœud en explorant et je n'arrivais pas à l'atteindre avec ma requête car j'utilisais "cm:". Cela dit, comme indiqué précédemment, le modèle m'est imposé.

J'en reviens donc à ma question initiale, est-il possible d'ajouter un filtre sur le nom du nom parent de mes fichier PDF, voir de filtrer directement dans mon PATH , sachant que je peux atteindre "TYPE_465_TOTO_10" par "cm:TYPE_465_TOTO_10" (contrairement à ce que j'ai indiqué plus haut dans mes requêtes, mais cela ne change rien au résultat) :
PATH:"app:company_home/montest:base_documentaire/montest:test//cm:TYPE_465_TOTO_10//*"
rguinot
Customer

Re: [Lucene] Requête avec filtre sur nom du noeud parent

Il manque un / au début avec app:company_home.

Faites attention à ce genre de requête PATH avec des wildcards, sont plus lentes que des requêtes par valeur de métadonnées (important donc de bien configurer les caches correspondant si inévitables). Peut être plus simple dans votre cas de tagger les fichiers en question avec un aspect et de rechercher ensuite les fichiers portant l'aspect.

Aussi possible de rechercher par mimetype, voir http://wiki.alfresco.com/wiki/Search#Finding_nodes_by_content_mimetype.