-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migration vers ElasticSearch 7 #5957
Migration vers ElasticSearch 7 #5957
Conversation
J'ai un peu investigué cette migration. En fait on rencontre deux problèmes qui imposent de repenser beaucoup de choses :
Pour donner un peu de contexte ; avant ES 6, ES présentait les index comme des bases de données et les mappings (qui représentent le format qu'ont les documents stockés dans l'index d'ES) comme des tables. Sauf qu'ils ont changé de point de vue là dessus, essentiellement car s'il y avait plusieurs mappings avec des champs nommés de la même façon dans un même index, ils étaient stockés de la même façon en interne, et devaient donc être identique. Ce qui causait des confusions. Désormais, la manière recommandée de faire c'est d'avoir un index par type de document. Aujourd'hui pour ZdS, on a un unique index avec des documents typés ; ES recommanderait d'avoir un index par type (un pour les messages du forum, un pour les sujets du forum, un pour les contenus ; typiquement). On peut aussi émuler l'ancien système avec notre propre champ Aure point, les relations parent/enfant. On les utilise pour les chapitres des contenus, qui sont indexés séparément mais qui référencent leurs parents. On peut toujours le faire tant que tout est dans un seul index (on aurait un index
Sommes-nous dans ce cas ? Pour certains contenus oui, pour d'autres à voir. Mais on pourrait dire que oui. Sinon il faudrait indexer d'un côté les contenus avec tout le texte assemblé ; et d'un autre chaque chapitre ; et faire le tri côté Python. Pour résumer, voici ce qui se dégage de tout ça et qui me semble le plus simple à implémenter (autant pour migrer que pour permettre de faire évoluer efficacement le moteur de recherche à l'avenir).
Si vous avez un avis, ça m'intéresse — surtout si vous connaissez mieux ElasticSearch que moi ! |
Concernant le deuxième point, je pense que le mieux est de « créer un seul index pour les contenus avec une jointure ES entre le contenu et ses chapitres » car :
|
Fermé par décision de la réunion des devs |
L'objectif de cette PR est de mettre à jour notre moteur de recherche, qui utilise actuellement ElasticSearch 5.5, vers ES 7.
ES 6 et 7 ont apporté plusieurs changements, le plus notable étant la suppression des types de documents que nous utilisons en interne pour différencier dans un même index les différents… types de documents (contenus, messages, …).
Cette PR devra donc :
Makefile
afin d'installer et de lancer ElasticSearch 7 ;searchv2
afin de ne plus utiliser les types de documents (il faudra décider de comment faire : on peut ou utiliser un index par type, ou émuler nous-même un type de documents et filtrer dessus lorsqu'on fait les recherches).Numéro du ticket concerné (optionnel) : #5554
Si les tests échouent, c'est totalement normal pour le moment.
Mise en production
Cette PR nécessitera la mise à jour d'ElasticSearch vers la version 7.9.2 (ou supérieur si une autre version sort entre temps) sur le serveur de production, ou bien en effectuant une mise à jour sans interruption de service, ou en remplaçant à froid ES 5.5 par ES 7.9 puis en réindexant totalement le site.
Il faudra également mettre à jour la configuration d'Ansible pour copier le sous-dossier
jvm.options.d
en plus du fichierjvm.options
.Contrôle qualité
Aucun de pertinent pour le moment. Voici ce qu'il faudra faire à terme.
make install-back && ./scripts/install_zds.sh +jdk-local +elastic-local
.make run-elasticsearch
.make index-all
.make index-flagged
.