Script de migration flyway du module de recherche
Certaines modifications dans la structure des fiches ou dans la définition des templates nécessitent des actions au niveau du moteur de recherche. A cet effet, le module Search met à disposition deux outils dédiés.
L'AbstractSearchEngineIndexing
Cet outil permet de planifier un job de reindexation totale ou partielle (par type de fiche). Pour utiliser cet outil, il suffit de créer une classe qui étend la classe abstraite et d'implémenter la méthode migrate.
Implémentation pour une indexation complète :
public class V1_2_3_45__reindexation_complete extends AbstractSearchEngineIndexing {
private static final Integer CHECKSUM = 1234567890;
@Override
public Integer getChecksum() {
return CHECKSUM;
}
@Override
public void migrate(final Context context) throws Exception {
// On indique qu'il s'agit d'une indexation complète
scheduleFullIndexation();
super.migrate(context);
}
}
Implémentation pour une indexation partielle :
public class V1_2_3_45__reindexation_partielle extends AbstractSearchEngineIndexing {
private static final Integer CHECKSUM = 1234567890;
@Override
public Integer getChecksum() {
return CHECKSUM;
}
@Override
public void migrate(final Context context) throws Exception {
// On indique via une collection les codes objet à indexer.
schedulePartialIndexation("0016", "0002");
super.migrate(context);
}
}
- Si plusieurs ré-indexations complètes sont demandées, une seule sera réellement exécutée.
- Si plusieurs ré-indexations partielles sont demandées, les types de fiches concernés seront fusionnés et le traitement lancé sur les types de fiches concernés.
- Si une ré-indexation totale est demandée, les ré-indexations partielles sont ignorées (car inutiles du fait de la ré-indexation totale).
L'AbstractSearchEngineManagement
Cet outil permet d'exposer le client REST du moteur de recherche. Il peut être utilisé par exemple pour supprimer un index devenu inutile.
public class V1_2_3_45__suppression_index extends AbstractSearchEngineManagement {
private static final Integer CHECKSUM = 1234567890;
@Override
public Integer getChecksum() {
return CHECKSUM;
}
@Override
public void migrate(final RestHighLevelClient restClient) {
final DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("nom_index_à_supprimer");
restClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
}
}