feat: Refonte du CLI & Web d’indexation
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’unsql_select + boucle sql_fetch
, c’est à dire ne surtout pas utilisersql_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.