BREAKING CHANGE: Document collection removed from Weaviate schema Architecture simplification: - Removed Document collection (unused by Flask app) - All metadata now in Work collection or file-based (chunks.json) - Simplified from 4 collections to 3 (Work, Chunk_v2, Summary_v2) Schema changes (schema.py): - Removed create_document_collection() function - Updated verify_schema() to expect 3 collections - Updated display_schema() and print_summary() - Updated documentation to reflect Chunk_v2/Summary_v2 Ingestion changes (weaviate_ingest.py): - Removed ingest_document_metadata() function - Removed ingest_document_collection parameter - Updated IngestResult to use work_uuid instead of document_uuid - Removed Document deletion from delete_document_chunks() - Updated DeleteResult TypedDict Type changes (types.py): - WeaviateIngestResult: document_uuid → work_uuid Documentation updates (.claude/CLAUDE.md): - Updated schema diagram (4 → 3 collections) - Removed Document references - Updated to reflect manual GPU vectorization Database changes: - Deleted Document collection (13 objects) - Deleted Chunk collection (0 objects, old schema) Benefits: - Simpler architecture (3 collections vs 4) - No redundant data storage - All metadata available via Work or file-based storage - Reduced Weaviate memory footprint Migration: - See DOCUMENT_COLLECTION_ANALYSIS.md for detailed analysis - See migrate_chunk_v2_to_none_vectorizer.py for vectorizer migration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
157 lines
5.6 KiB
Markdown
157 lines
5.6 KiB
Markdown
# Analyse: Collection Document - À supprimer
|
|
|
|
**Date**: 2026-01-09
|
|
**Statut**: ✅ CONFIRMATION - La collection Document n'est PAS utilisée et DOIT être supprimée
|
|
|
|
## Problème identifié
|
|
|
|
La collection `Document` est toujours définie dans le schéma et contient actuellement **13 objets**, alors que l'architecture devrait utiliser uniquement:
|
|
- `Work` - Métadonnées des œuvres
|
|
- `Chunk_v2` - Fragments vectorisés (5,372 chunks)
|
|
- `Summary_v2` - Résumés de sections (114 summaries)
|
|
|
|
## État actuel
|
|
|
|
### Collections existantes (Weaviate):
|
|
```
|
|
Work: 19 objets ✓ UTILISÉ
|
|
Document: 13 objets ✗ NON UTILISÉ (à supprimer)
|
|
Chunk_v2: 5,372 objets ✓ UTILISÉ
|
|
Summary_v2: 114 objets ✓ UTILISÉ
|
|
Chunk: 0 objets (ancienne collection, peut être supprimée)
|
|
Conversation, Message, Thought: Collections chat (séparées)
|
|
```
|
|
|
|
### Données dans Document:
|
|
```json
|
|
{
|
|
"sourceId": "Alan_Turing_and_John_von_Neumann_Their_B",
|
|
"edition": null,
|
|
"pages": 0,
|
|
"chunksCount": 11,
|
|
"work": null
|
|
}
|
|
```
|
|
|
|
**Observation**: La plupart des champs sont NULL ou 0 (pas de données utiles).
|
|
|
|
## Analyse du code
|
|
|
|
### 1. Schéma (`schema.py`)
|
|
|
|
**Lignes 159-224**: Définition complète de la collection Document
|
|
- Créée par défaut lors de l'initialisation du schéma
|
|
- Propriétés: sourceId, edition, language, pages, chunksCount, toc, hierarchy, createdAt, work (nested)
|
|
|
|
**Problème de cohérence** (lignes 747-757 dans `weaviate_ingest.py`):
|
|
```python
|
|
doc_obj: Dict[str, Any] = {
|
|
"sourceId": doc_name,
|
|
"title": title, # ❌ N'EXISTE PAS dans schema.py
|
|
"author": author, # ❌ N'EXISTE PAS dans schema.py
|
|
"toc": json.dumps(toc),
|
|
"hierarchy": json.dumps(hierarchy),
|
|
"pages": pages,
|
|
"chunksCount": chunks_count,
|
|
"language": metadata.get("language"),
|
|
"createdAt": datetime.now().isoformat(),
|
|
}
|
|
```
|
|
|
|
Le code d'ingestion essaie d'insérer des champs `title` et `author` qui n'existent pas dans le schéma! Cela devrait causer une erreur mais est silencieusement ignoré.
|
|
|
|
### 2. Ingestion (`utils/weaviate_ingest.py`)
|
|
|
|
**Fonction `ingest_document_metadata()` (lignes 695-765)**:
|
|
- Insère les métadonnées du document dans la collection Document
|
|
- Stocke: sourceId, toc, hierarchy, pages, chunksCount, language, createdAt
|
|
|
|
**Fonction `ingest_document()` (lignes 891-1107)**:
|
|
- Paramètre: `ingest_document_collection: bool = True` (ligne 909)
|
|
- Par défaut, la fonction INSÈRE dans Document collection (ligne 1010)
|
|
|
|
**Fonction `delete_document_from_weaviate()` (lignes 1213-1267)**:
|
|
- Supprime de la collection Document (ligne 1243)
|
|
|
|
### 3. Flask App (`flask_app.py`)
|
|
|
|
**Résultat**: ✅ AUCUNE référence à la collection Document
|
|
- Pas de `collections.get("Document")`
|
|
- Pas de requêtes vers Document
|
|
- Les TOC et métadonnées sont chargées depuis les fichiers `chunks.json` (ligne 3360)
|
|
|
|
## Conclusion: Document n'est PAS nécessaire
|
|
|
|
### Données actuellement dans Document:
|
|
|
|
| Champ | Disponible ailleurs? | Source alternative |
|
|
|-------|---------------------|-------------------|
|
|
| `sourceId` | ✓ | `Chunk_v2.workTitle` (dénormalisé) |
|
|
| `toc` | ✓ | `output/<doc>/<doc>_chunks.json` |
|
|
| `hierarchy` | ✓ | `output/<doc>/<doc>_chunks.json` |
|
|
| `pages` | ✓ | `output/<doc>/<doc>_chunks.json` (metadata.pages) |
|
|
| `chunksCount` | ✓ | Dérivable via `Chunk_v2.aggregate.over_all(filter=workTitle)` |
|
|
| `language` | ✓ | `Work.language` + `Chunk_v2.language` |
|
|
| `createdAt` | ✓ | Dérivable via horodatage système des fichiers output/ |
|
|
| `edition` | ✗ | Jamais renseigné (toujours NULL) |
|
|
| `work` (nested) | ✓ | Collection `Work` dédiée |
|
|
|
|
**Verdict**: Toutes les informations utiles de Document sont disponibles ailleurs. La collection est redondante.
|
|
|
|
## Impact de la suppression
|
|
|
|
### ✅ Aucun impact négatif:
|
|
- Flask app n'utilise pas Document
|
|
- TOC/hierarchy chargés depuis fichiers JSON
|
|
- Métadonnées disponibles dans Work et Chunk_v2
|
|
|
|
### ✅ Bénéfices:
|
|
- Simplifie l'architecture (3 collections au lieu de 4)
|
|
- Réduit la mémoire Weaviate (~13 objets + index)
|
|
- Simplifie le code d'ingestion (moins d'étapes)
|
|
- Évite la confusion sur "quelle collection utiliser?"
|
|
|
|
## Plan d'action recommandé
|
|
|
|
### Étape 1: Supprimer la collection Document de Weaviate
|
|
```python
|
|
import weaviate
|
|
client = weaviate.connect_to_local()
|
|
client.collections.delete("Document")
|
|
client.close()
|
|
```
|
|
|
|
### Étape 2: Supprimer de `schema.py`
|
|
- Supprimer fonction `create_document_collection()` (lignes 159-224)
|
|
- Supprimer appel dans `create_schema()` (ligne 432)
|
|
- Mettre à jour `verify_schema()` pour ne plus vérifier Document (ligne 456)
|
|
- Mettre à jour `display_schema()` pour ne plus afficher Document (ligne 483)
|
|
|
|
### Étape 3: Nettoyer `utils/weaviate_ingest.py`
|
|
- Supprimer fonction `ingest_document_metadata()` (lignes 695-765)
|
|
- Supprimer paramètre `ingest_document_collection` (ligne 909)
|
|
- Supprimer appel à `ingest_document_metadata()` (ligne 1010)
|
|
- Supprimer suppression de Document dans `delete_document_from_weaviate()` (lignes 1241-1248)
|
|
|
|
### Étape 4: Mettre à jour la documentation
|
|
- Mettre à jour `schema.py` docstring (ligne 12: supprimer Document de la hiérarchie)
|
|
- Mettre à jour `CLAUDE.md` (ligne 11: supprimer Document)
|
|
- Mettre à jour `.claude/CLAUDE.md` (supprimer références à Document)
|
|
|
|
### Étape 5: Supprimer aussi la collection `Chunk` (ancienne)
|
|
```python
|
|
# Chunk_v2 la remplace complètement
|
|
client.collections.delete("Chunk")
|
|
```
|
|
|
|
## Risques
|
|
|
|
**Aucun risque identifié** car:
|
|
- Collection non utilisée par l'application
|
|
- Données disponibles ailleurs
|
|
- Pas de dépendances externes
|
|
|
|
---
|
|
|
|
**Recommandation finale**: Procéder à la suppression immédiate de la collection Document.
|