spip-contrib-extensions/indexer | 3 commits
Par Matthieu Marcillaud, le 6 septembre 2024 à 12h40min :
feat: Refonte du CLI 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.
Ajouté
lib/Indexer/Sources/SourceGeneratorInterface.php
Modifié
Sources/HierarchieMots.php
Sources/HierarchieRubriques.php
Sources/SpipDocuments.php
inc/indexer.php
lib/Indexer/Sources/SourceInterface.php
lib/Indexer/Sources/Sources.php
lib/Indexer/Storage/Sphinx.php
lib/Sphinx/SphinxQL/SphinxQL.php
spip-cli/IndexerIndexer.php
==============================
Par Matthieu Marcillaud, le 5 septembre 2024 à 15h04min :
fix: Renommer la commande indexer:purge en indexer:purger (l’ancien nom est conservé en alias)
Ajouté
spip-cli/IndexerPurger.php
==============================
Par Matthieu Marcillaud, le 5 septembre 2024 à 14h59min :
fix: inclusion manquante dans commande indexer:dump
Modifié
inc/indexer.php