Skip to content

feat: Refonte du CLI & Web d’indexation

marcimat a demandé de fusionner dev_cli vers master

On s’appuie sur des générateurs PHP pour requêter / indexer l’ensemble des documents sans exploser la mémoire.

Cela oblige à avoir des méthodes différentes pour

  • obtenir le nombre de documents à indexer
  • obtenir la liste des documents à indexer

Ces méthodes sont mises dans l’interface SourceGeneratorInterface et sont donc

  • countDocuments($start = 0, $end = 0, $column = ''): int;
  • yieldDocuments($start = 0, $end = 0, $column = ''): \Generator

ainsi que :

  • countAllDocuments()
  • yieldAllDocuments(): \Generator

Ces 2 dernières peuvent appeler les 2 premières méthodes, sans arguments respectivement.

Dans le cadre de documents SQL,

  • la méthode countDocuments peut retourner un sql_countsel(...)
  • la méthode yieldDocuments peut faire des yield à l’interieur d’un sql_select + boucle sql_fetch, c’est à dire ne surtout pas utiliser sql_allfetsel() qui chargerait tout en mémoire. Exemple dans SpipDocuments :
$res = sql_select('*', $this->table_objet, $where);
while ($contenu = sql_fetch($res)) {
	yield $this->createDocumentObjet($contenu);
}

On corrige également le fait que la connexion à la base Sphinx se faisait à chaque appel à replaceDocuments ou replaceDocument, ce qui, lors de long traitements en cli finissait par tuer la connexion. Donc, on garde la même connexion, tant qu’elle fonctionne.

Rapports de requête de fusion

Chargement en cours