Lettres, moteur de recherche
===
- Le moteur de recherche doit permettre prioritairement d’accéder aux documents (plutôt qu’aux occurrences d’un motif de recherche plein texte). Il s’appuie sur les métadonnées attachées à chaque document. La recherche plein texte vient en complément : le concordancier est "secondaire".
- Souhait d’un formulaire par défaut à 4 critères (1), complété par d’autres critères (2).
## (1) Formulaire par défaut
### Objectif
Il s’agit de la boîte de recherche qui doit être toujours accessible.
Objectif : lister tous les documents mentionnant une/des personne(s) **ET/OU** un/des lieu(x) **ET/OU** contenant une expression, pour une période définie.
**Exemples de requêtes :**
- Lister les lettres en lien avec `Henri IV`
- Lister les lettres en lien avec `Henri IV` ET `Catherine de Médicis`
- Lister les lettres en lien avec `Senlis`
- Lister les lettres en lien avec `Senlis` et `Lille`
- Lister les lettres en lien avec `Henri IV` ET `Lille`
- Lister les lettres en lien avec `Henri IV` ET `Catherine de Médicis` ET `Senlis` ET `Lille`
- Lister les lettres datées (expédiées) à partir de `1562`
- Lister les lettres datées (expédiées) jusqu’à `1593`
- Lister les lettres datées (expédiées) entre `1562` et `1593`
- Lister les lettres datées (expédiées) entre `1562` et `1593`, en lien avec `Henri IV`
- Lister les lettres datées (expédiées) entre `1562` et `1593`, en lien avec `Henri IV` ET `Catherine de Médicis` ET `Senlis` ET `Lille`
- Lister les lettres dont la transcription contient le terme `réformés?`
- Lister les lettres dont la transcription contient le terme `réformés?`, en lien avec `Catherine de Médicis`
- Lister les lettres dont la transcription contient le terme `réformés?`, entre `1572` et `1573`, en lien avec `Catherine de Médicis` ET `Gaspard de Coligny` ET `Paris` ET `Blois`
**Filtres :**
NB. On ne prend PAS en charge l’opérateur 'OU' ; la combinatoire est difficile à appréhender avec autant de filtres. "Lister les lettres en lien avec Henri IV ET Catherine de Médicis" : la collection des lettres où il est question des 2 personnages (et non pas de l’un OU de l’autre).
Il s’agit de filtres : on réduit le nombre de résultats (logique d’entonnoir).
### Champs
1. Personne
2. Date de lieu
3. Date de temps
4. *Content*
#### 1. Personne
*Input* avec autocomplétion pour sélectionner une personne décrite en base, quel que soit son statut : expéditeur (`sender`), destinataire (`recipient`) ou sujet (`inlined`).
On doit pouvoir sélectionner plusieurs personnes successivement.
La sélection active est affichée sous la forme d’un tag-filtre activé.
Remarques / questions :
- Dans le volet de recherche avancée, la sélection se retrouve réexprimée avec l’activation de 3 filtres, pour la même personne : expéditeur, destinataire, sujet
- Par défaut, permettre la sélection de plusieurs personnes ?
- Exemple de sélecteur : [https://vuejsexamples.com/nova-4-filter-component-based-on-the-headless-ui-combobox-component/](https://vuejsexamples.com/nova-4-filter-component-based-on-the-headless-ui-combobox-component/)
#### 2. Date de lieu
*Input* avec autocomplétion pour sélectionner une ville décrite en base, quel que soit son statut : lieu d’expédition (`location-date-from`), lieu de réception (`location-date-to`) ou sujet (`inlined`).
On doit pouvoir sélectionner plusieurs villes successivement.
#### 3. Date de temps
Dans cette vue de base, un slider doit permettre de sélectionner l’intervalle entre 2 années.
Cf modèle ENCPOS (slider + 2 inputs pour spécifier une date).
#### 4. Content
*Input* pour saisir une chaîne de caractères (regex).
## (2) Formulaire étendu
### Objectif
Il s’agit :
- d’affiner certains filtres (par ex. pouvoir préciser une date au jour près) ;
- de fournir de nouveaux filtres.
**Exemples de requêtes :**
- Lister les lettres dont `Catherine de Medicis` est l’expéditrice d’`avril 1572`
- Lister les lettres dont la transcription contient le terme `réformés?` et cite `Gaspard de Coligny` entre `1572` et `1573`
- Lister les lettres dont la transcription contient le terme `réformés?` et mentionne `Gaspard de Coligny` en date du `14 avril 1572` expédiées depuis `Blois`.
- Lister les lettres dont la transcription contient le terme `réformés?` et le paratexte éditorial (notes et analyse) contient le terme `protestant`.
- Lister les lettres dont la transcription mentionne `Gaspard de Coligny` et dont `Catherine de Médicis` est la destinataire.
- Lister les lettres dont un témoin est conservé à la `BnF`.
- Lister les lettres dont la transcription mentionne `Gaspard de Coligny`, dont `Catherine de Médicis` est la destinataire en `1572` et dont un témoin est conservé à la `BnF`.
- Lister les lettres dont la transcription mentionne `Gaspard de Coligny`, dont `Catherine de Médicis` est la destinataire en `1572` en `allemand`.
- Lister les lettres dont un témoin est conservé à la `BnF` dans le volume coté `Fr. 3205`.
### Champs
1. Personne
1. Expéditeur
2. Destinataire
3. Sujet
2. Date de lieu
1. lieu d’expédition
2. lieu de réception
3. sujet
3. Date de temps
4. *Content*
1. Transcription
2. Note
3. Titre ?
4. Analyse ?
5. Langue du document
6. Institution de conservation
1. + cote
#### Personne
*Input* avec autocomplétion pour sélectionner une personne décrite en base **SELON** son statut : expéditeur (`sender`), destinataire (`recipient`) ou sujet (`inlined`).
On doit pouvoir sélectionner plusieurs personnes successivement.
La sélection active est affichée sous la forme d’un tag-filtre activé.
#### Date de lieu
*Input* avec autocomplétion pour sélectionner une ville décrite en base **SELON** son statut : lieu d’expédition (`location-date-from`), lieu de réception (`location-date-to`) ou sujet (`inlined`).
On doit pouvoir sélectionner plusieurs villes successivement.
#### Date de temps
Dans cette vue de base, un slider doit permettre de sélectionner l’intervalle entre 2 dates exprimées au jour près.
Cf modèle déployé dans la recherche avancée de l’application en développement.
#### *Content*
*Input* pour saisir une chaîne de caractères (regex).
Pouvoir activer la recherche floue (ex. du DicoTopo pour le réglage de la *fuzziness*).
#### Langue du document
Sélecteur pour la/les langue(s) de la lettre (`document_has_language.language_id`).
#### Institution de conservation
Sélectionner une institution de conservation (sélection d’une valeur de `institution.name`).
Pouvoir saisir une cote (recherche plein texte dans `witness.classification_mark`)
## Visualisation des résultats
- Liste simple (comme version actuellement déployée enrichies de l’expéditeur et du destinataire)
- Pouvoir déplier l’analyse
- Pouvoir en cas de recherche *Content* afficher les occurrences (modèles ENCPOS)
- TODO. Spécifier les filtres à afficher pour affiner la réponse (cf EMLO)
- TODO. Imaginer une vue cartographique (3 types de lieu…)
- TODO. Imaginer pour chaque personne le graphe de ses correspondants (rebond depuis un tag vers une notice d’autorité ?)
## Fonctionnalités
- conserver dans la session le résultat de la dernière recherche (recherche courante)
- fournir un lien pour chaque recherche
- export des résultats ? => une liste ? quel formatage ?
- pouvoir rechercher des lettres selon un ark Gallica ? Lister toutes les lettres contenues dans un document Gallica identifié par son ark ?
NB. OP écarte l’idée de proposer un filtre par (sous-)collection
## Problèmes
### mise en cohérence des formulaires (1) et (2)
Exemple du statut des personnes : par défaut (1), on sélectionne une personne quel que soit sont statut. Dans la vue de résultats, ce filtre peut être réexprimé sous la forme de 3 filtres : par ex. le tag sélectionné `Catherine de Médicis` sera affiché 3 fois, sous les 3 catégories (Expéditeur, Destinataire et Sujet) ; possiblement déselectionnable…
Du coup, un résultat affiché pourra ne plus correspondre à la requête formulée dans le formulaire par défaut.
Bref, on bascule facilement du formualaire (1) au formulaire (2), mais le chemin inverse pose problème.
**Point à discuter.**
**Vue 1**
|Filtre||
|------|---|
|Personne|`Catherine de Médicis` `Gaspard de Coligny`|
|Lieu|`Blois` `Senlis`|
|Date|`1572`-`1575`|
|Contenu|réformés?|
**Vue 2**
|Filtre||
|------|---|
|Expéditeur|`Catherine de Médicis`|
|Destinataire||
|Personne citée|`Gaspard de Coligny`|
|Ville d’expédition|`Blois`|
|Ville de destination|`Senlis`|
|Ville citée||
|Date|`1572-04-14`-`1572-07-14`|
|Contenu|fuzzy_search("réformés?", 0.8)|