Ce plugin permet d'indexer des objets fr.paris.lutece.plugins.grubusiness.business.customer.Customer de la librairie gru-library-grubusiness. Une recherche sur les usagers peut alors être effectuée.
Ce plugin contient deux implémentations de l'indexation :
Indexation
La classe gérant l'indexation est fr.paris.lutece.plugins.gruindexing.business.lucene.LuceneCustomerDAO. Elle est également configurée en tant que bean dans le contexte Spring. Elle peut être configurée :
Recherche
La classe gérant la recherche est fr.paris.lutece.plugins.gruindexing.business.lucene.LuceneCustomerDAO. Voir la section Indexing ci-dessus pour configurer la classe.
Seuls le nom et/ou le prénom peuvent être recherchés.
Recherche avec autocomplétion
La classe gérant la recherche avec autocomplétion est fr.paris.lutece.plugins.gruindexing.web.rs.lucene.LuceneAutoCompleteRestService. Elle est également configurée en tant que bean dans le contexte Spring. C'est un service web qui peut être appelé à l'URL /rest/lucene/autocomplete avec la méthode GET. Le paramètre query doit contenir les termes à rechercher.
Seuls le nom et/ou le prénom peuvent être recherchés.
L'autocomplétion retourne une chaîne de caractères JSON avec les champs suivants :
{ "autocomplete": [{ "output": "John Doe", "search":{ "first_name":"John", "last_name":"Doe" } }, { "output": "John Black", "search":{ "first_name":"John", "last_name":"Black" } }] }
Avant d'utiliser Elasticsearch, il faut modifier les clés suivantes dans le fichier de propriétés :
Indexation
La classe gérant l'indexation est fr.paris.lutece.plugins.gruindexing.business.elasticsearch.ElasticSearchCustomerDAO. Elle est également configurée en tant que bean dans le contexte Spring.
La requête d'indexation est définie dans le fichier WEB-INF/plugins/gruindexing/elasticsearch_customer_indexing.template. Elle contient des marques (comme ${user_cid}) qui sont remplacées par les valeurs réelles au moment de l'indexation. Certaines marques sont prédéfinies :
De la même façon, certains champs indexés sont prédéfinis :
Afin d'utiliser l'autocomplétion, le template doit contenir un champ suggest et un champ payload. Le champ suggest est un champ de complétion standard Elasticsearch. Le champ payload doit contenir les champs suivants :
"suggest":{ "input":[ "${first_name} ${last_name}", "${last_name} ${first_name}", "${telephoneNumber}", "${fixed_telephone_number}" ], "payload":{ "output":"${first_name} ${last_name}", "search":{ "first_name":"${first_name}", "last_name":"${last_name}" } } }
"suggest":{ "input":[ "${first_name} ${last_name}", "${last_name} ${first_name}", "${telephoneNumber}", "${fixed_telephone_number}" ] }, "payload":{ "output":"${first_name} ${last_name}", "search":{ "first_name":"${first_name}", "last_name":"${last_name}" } }
Recherche
La classe gérant la recherche est fr.paris.lutece.plugins.gruindexing.business.elasticsearch.ElasticSearchCustomerDAO. Elle est également configurée en tant que bean dans le contexte Spring.
La recherche peut être configurée en modifiant les clés suivantes dans le fichier de propriétés :
Recherche avec autocomplétion
La classe gérant la recherche avec autocomplétion est fr.paris.lutece.plugins.gruindexing.web.rs.elasticsearch.ElasticSearchAutoCompleteRestService. Elle est également configurée en tant que bean dans le contexte Spring. C'est un service web qui peut être appelé à l'URL /rest/elasticsearch/autocomplete avec la méthode GET. Le paramètre query doit contenir les termes à rechercher.
La requête d'autocomplétion est définie dans le fichier WEB-INF/plugins/gruindexing/elasticsearch_autocomplete.template. Elle contient une marque ${query} qui est remplacée par les termes à compléter au moment de la recherche.
On peut ajouter des marques personnalisées dans ce template. Afin de remplacer ces marques par leurs valeurs réelles, il suffit d'implémenter l'interface fr.paris.lutece.plugins.gruindexing.web.elasticsearch.template.IAutocompletePlaceholderFilter et de déclarer l'implémentation en tant que bean dans le contexte Spring.
L'autocomplétion retourne une chaîne de caractères JSON avec les champs suivants :
{ "autocomplete": [{ "output": "John Doe", "search":{ "first_name":"John", "last_name":"Doe" } }, { "output": "John Black", "search":{ "first_name":"John", "last_name":"Black" } }] }