Recherche Tutorial
Quelle est cette fleur ?
Il s’agit d’Alfresco !
Une solution ECM Open Source
Le problème ?
Personnes curieuses de connaître Alfresco...
Avec beaucoup de questions… (A formuler…)
Une solution possible
Simple présentateur de présentations sur Alfresco...
Avec quelques réponses… (A vérifier)
Allons-y !
Mais avant un rappel !
Un principe…Tout est nœud !
(Everything is NODE!)
Quel beau nœud je suis!
Une règle…Alfresco fournit des services pour gérer
Des noeuds
Eh oui… Même moi j’ai un patron…
Maintenant Allons-y !
J’ai cru comprendre qu’il existe plusieurs langages
de recherches possibles…
Effectivement!Petit tour d’horizon…
XPath
Lucene
Lucene en premier!
Lucene ?• Apache Lucene is a high-
performance, full-featured text search engine library written entirely in Java.
• Although Lucene provides the ability to create your own queries through its API, it also provides a rich query language through the Query Parser, a lexer which interprets a string into a Lucene Query using JavaCC.
• Source: Lucene.org
Et dans Alfresco… Comment cela fonctionne ?
Pour résumé…
1. La collecte
PropriétésAspect
Mot clés
ID
Type
2. La conservation
Propriétés
Aspect
Mot clés
IDType
3. L’utilisation
Propriétés
Mot clésAspect
Pour aller plus loin…
Lors de la création d’un nœud, il y a • Une indexation de
l’ensemble des propriétés de l’élément
&
• Une indexation plein texte du contenu associé
Lors de la création d’un nœud, il y a
• Une indexation plein texte du contenu associé si le contenu est au format : – Office (Open ou Microsoft)– XML/HTML– PDF– Emails– Texte
Pour le vérifier…
Il faut consulter le modèle de données !
Fichier : contentModel.xml
Fichier : contentModel.xml
Mais quel est le principe de la
« tokenisation » ?
Il s’agit de découper (ou non) un (des)
mot(s) en plusieurs mots clés.
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
Prenons une phrase comme
exemple
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
Si on n’effectue pas de segmentation
(tokenised)…
Contenu
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
On effectue une copie conforme de la
phrase dans l’index.
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
INDEX
Contenu
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
Pour rechercher, il faudra donc connaître
la phrase entière !
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
INDEX
Contenu
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
Par contre si on effectue une
segmentation…
Contenu
Il s’agit d’une présentation PowerPoint sur Alfresco et la recherche.
On ne prend que les mots clés de la
phrase!
Présentation, PowerPoint, Alfresco, recherche
INDEX
Contenu
Donc n’oubliez pas de vérifier le modèle de
données !
OK… Démonstrations!
Un peu de théorie
Lucene dans Alfresco permet de faire des requêtes sur…
Vous travaillez pour les services secrets ?
• Le NodeRef (ID) Le NodeRef (ID)
• Le TypeLe Type
• Les PropriétésLes Propriétés
• Les AspectsLes Aspects
• Les Mot Clés Les Mot Clés (Contenu)(Contenu)
D’un NŒUD!D’un NŒUD!
Les Requêtes
Pour faire une requête sur le Noderef
L’utilité de rechercher un nœud dont on sait déjà qui
il est ?
ID:" <Mon NodeRef> "ID:" <Mon NodeRef> "
Pour faire une requête sur le Type
J’espère que vous vous rappelez du QName…
TYPE:" <TypeQName> "TYPE:" <TypeQName> "
Sinon c’est par ici
Pour faire une requête sur une propriété
Pourquoi c’est pas pareil que les autres??
@<QNamePropriété>\:" Valeur "@<QNamePropriété>\:" Valeur "
Pourquoi c’est pas en majuscules ?
Pour faire une requête sur un Aspect
AAhh! La c’est mieux!
ASPECT:" <AspectQName> "ASPECT:" <AspectQName> "
Pour faire une requête sur un mot clé du contenu d’un
noeud
Bon ok… j’ai compris le principe!
TEXT:<valeur>TEXT:<valeur>
On commence à s’ennuyer la…
Mise en condition
Voici notre terrain
Mise en Pratique
Remarque
Lucene et Alfresco!Suivant la version que vous possédez
d’Alfresco, il se peut que les résultats que vous obteniez soit totalement
différents des miens.
C’est aussi ça la magie de la recherche!
Comment faire simplement une requête lucene
Se connecter avec le rôle « admin » à Alfresco
Cliquer sur
Puis choisir navigateur de noeuds
Comment faire simplement une requête lucene
Choisir le store : workspace://SpacesStore
Dans la liste déroulante, choisir Lucene
Prêt ?
Je veux le « Folder Test »
Je veux le « Folder Test »!!!!!
@cm\:name:’’Folder Test’’@cm\:name:’’Folder Test’’
Résultat
Un rappel !
Pour identifier et rendre unique un nœud dans un store, on
utilise …
UnUUID
La concaténation du protocole, du nom du store et de l’UUID
d’un nœud forme
UnNodeRef
Dans notre cas
UUIDNodeRef
Je veux le « Foder Test » mais
avec l’UUID ID:"workspace://SpacesStore/ID:"workspace://SpacesStore/
b7ecc8b1-5edb-11dd-b7ecc8b1-5edb-11dd-afdd-79a008cbb404"afdd-79a008cbb404"
Et si on veut plusieurs critères à notre recherche ?
On peut rajouter des opérateurs !
+ Pour ajouter un critère validé - Pour ajouter un critère non validé
AND Pour ajouter un critère
OR Pour ajouter un choix entre critères
NOT Pour exclure un critère
Les Opérateurs
Je veux tous les espaces avec le nom « space »TYPE:"cm:folder" AND @cm\:name:"Space"
TYPE:"cm:folder" +@cm\:name:"Space"
+TYPE:"cm:folder" AND @cm\:name:"Space"
Résultat
Remarque
FOLDER ≈ ESPACE
Folder représente un type de nœud.
Space est la traduction littérale anglaise d’un folder.
Espace est la traduction littérale du Space anglais.
Ajout d’une catégorie à un espace
Mise en condition
Je veux tous les folders avec le nom « space » et qui posséde
une catégorieTYPE:"cm:folder"
AND @cm\:name:"Space" AND ASPECT:"cm:generalclassifiable"
Je veux tous les espaces avec le nom « space » et qui
NE posséde PAS une catégorieTYPE:"cm:folder"
AND @cm\:name:"Space" AND NOT ASPECT:"cm:generalclassifiable"
TYPE:"cm:folder" +@cm\:name:"Space" -ASPECT:"cm:generalclassifiable"
Résultat
Remarque
Cette zone est expérimentale et est très
aléatoire suivant les expériences !
Il existe des opérateurs spéciaux pour la recherche !
? Peut remplacer un caractère
* Peut remplacer plusieurs
caractères
Les opérateurs spéciaux
Je veux tous les espaces avec le nom commençant par « spa »
TYPE:"cm:folder" AND @cm\:name:"Spa*"
TYPE:"cm:folder" +@cm\:name:"Spa*"
Je veux tous les espaces avec le nom terminant par « ace »
TYPE:"cm:folder" AND @cm\:name:"*ace"
TYPE:"cm:folder" +@cm\:name:"*ace"
Remarque
FIN DE ZONE EN CHANTIER!
Cette zone était expérimentale!
Pour en savoir plus Lucene WebSite• http://lucene.apache.org/• http://lucene.apache.org/java/docs/queryparsersyntax.html
Alfresco Wiki• http://wiki.alfresco.com/wiki/Search#Lucene• http://wiki.alfresco.com/wiki/Lucene• http://wiki.alfresco.com/wiki/Lucene_Extensions_and_Issues
Maintenant XPath!
XPath ?• XPath is a language for
addressing parts of an XML document, designed to be used by both XSLT and XPointer.
• Source w3c.org
Mais on parle de nœuds… Pas de xml…
En effet mais…
Un principe…Un nœud
peut être vu commeUn XML
Mirroir
XML
J’ai une drôle de tête moi…
La preuve dans Alfresco…
WebApp
ACP
Explorateur
ACP
Donc avec XPath, on peut naviguer dans les nœuds…
Effectivement !Démonstrations..
Un peu de théorie
XPath dans Alfresco permet de faire des requêtes sur…
Pourquoi toujours moi…
• Le TypeLe Type
• Les PropriétésLes Propriétés
• Les AspectsLes Aspects
• Les associationsLes associations
D’un NŒUD!D’un NŒUD!
Les Axes
Vous savez jouer au jeu des 7 familles ?
Eh bien les axes XPath c’est pareil!
Dans la famille Nœud, je voudrais moi !
selfself
Ensuite mon Père!
parentparent
Ensuite mes enfants!
ChildChild
Ensuite mes frères ainés
preceding-siblingpreceding-sibling
Ensuite mes soeurs cadettes
following-siblingfollowing-sibling
Maintenant, allons plus loin dans ma famille!
Je veux connaître toute ma descendance !
descendantdescendant
Je veux connaître tous mes ancêtres
ancestorancestor
Je veux tous les nœuds plus âgés
precedingpreceding
Je veux tous les nœuds plus jeunes
followingfollowing
Hein… Elle est belle ma famille?
Malheureusement, toute la famille n’est pas
visible avec Alfresco…
precedingpreceding
followingfollowing
preceding-siblingpreceding-sibling
following-siblingfollowing-sibling
Les Requêtes
Pour faire une requête sur un axe
En gros, Je veux tous les nœuds de cet axe!
Axe::*Axe::*
Pour faire une requête sur une propriété
Ca me rappelle un peu Lucene…
Axe::*[@<QName>:’<Valeur>’Axe::*[@<QName>:’<Valeur>’]
Pour faire une requête sur un aspect
L’aspect ne fait pas le nœud… Drôle non ?
Axe::*[hasAspect(’<QNameAspect>’)Axe::*[hasAspect(’<QNameAspect>’)]
Pour faire une requête sur un type
Attention ! Il s’agit du type et des types fils!!!
Axe::*[subtypeOf(’<QNameType>’)Axe::*[subtypeOf(’<QNameType>’)]
Pour faire une requête sur l’ensemble des propriétés
et du contenu…
Utile, n’est il pas ?
Axe::*[contains(’<Valeur>’)Axe::*[contains(’<Valeur>’)]
Mise en condition
Voici notre terrain
Mise en Pratique
Comment faire simplement une requête lucene
Se connecter avec le rôle « admin » à Alfresco
Cliquer sur
Puis choisir navigateur de noeuds
Comment faire simplement une requête lucene
Choisir le store : workspace://SpacesStore
Dans la liste déroulante, choisir selectNodes
Pourquoi est ce que l’on ne prend pas XPath ??
C’est la même chose!Sauf que …
SelectNodes : Relatif au nœud
en cours
XPath : Absolue par rapport à la
racine du store
Or nous on veut se placer dans un folder spécifique!
Prêt ?
Je veux le nœud en cours
self::*
Résultat
Je veux les fils du nœud en cours
descendant::*
Je veux le père du nœud en cours
parent::*
Je veux le fils qui posséde une description
« Space 1.1 Description »
descendant::*[@cm:description='Space 1.1 Description']
A noter que les opérateurs sont aussi disponibles en XPath…
Je veux le fils qui possède une description « Space 1.1
Description » et qui soit de type folder
descendant::*[@cm:description='Space 1.1 Description' and
subtypeOf('cm:folder')]
Je veux le fils qui possède l’aspect lié aux catégories et
qui soit de type folder
descendant::*[hasAspect('cm:generalclassifiable') and
subtypeOf('cm:folder')]
Pour en savoir plus• Wikipedia [FR]
• W3Schools[ENG]
• Spécifications W3C : Xpath 1.0[ENG]• Spécifications W3C : XPath 2.0[ENG]
• Developpez.com (A voir!)
J’ai maintenant plein de nœuds! Mais Où est Charlie... Enfin… le bon nœud ?
Si vous cherchez un nœud, utilisez les services…
En premier, pensez Alfreso Service Registry !
Et faites appel à …ActionService
AttributeServiceAuditService
AuthenticationServiceAuthorityService
AVMService
CategoryService
CheckOutCheckInService
ContentService
CopyService
DictionnaryService
FileFolderService
EditionService
ExporterServiceImporterService
MimeTypeService
MultilangualContentService
NodeService
LockService
RuleService
ScriptService
SearchService
TemplateService
TransactionServiceVersionService
WorkflowService
Et faites appel à …ActionService
AttributeServiceAuditService
AuthenticationServiceAuthorityService
AVMService
CategoryService
CheckOutCheckInService
ContentService
CopyService
DictionnaryService
FileFolderService
EditionService
ExporterServiceImporterService
MimeTypeService
MultilangualContentService
NodeService
LockService
RuleService
ScriptService
SearchService
TemplateService
TransactionServiceVersionService
WorkflowService
Ou encore…ActionService
AttributeServiceAuditService
AuthenticationServiceAuthorityService
AVMService
CategoryService
CheckOutCheckInService
ContentService
CopyService
DictionnaryService
FileFolderService
EditionService
ExporterServiceImporterService
MimeTypeService
MultilangualContentService
NodeService
LockService
RuleService
ScriptService
SearchService
TemplateService
TransactionServiceVersionService
WorkflowService
Voilà! C’est fini pour aujourd’hui!
Maintenant à vous de chercher… Ou rechercher!
Des questions ???
Pour une prochaine fois…
Dans les prochains épisodes…
Et si je veux partager mes nœuds ?
Il faudra utiliser les protocoles…
Pour découvrir…
Pour aller de l’avant…
Et pour atteindre ces objectifs…
Choisissez l’ECM Open Source
Alfresco en quelques points…
Par JM.PASCAL
www.opensourceecm.fr&
www.open-source-ecm.com