Bonsoir à tous,

Voilà bientôt une semaine que je rage sur mon incapacité à supprimer
un document dans un index. J'ai recherché dans la documentation disponible
et ai essayé les méthodes des classes suivantes sans succès.

IndexWriter.deleteDocuments(Term)
IndexWriter.deleteDocuments(Query)
InderReader.deleteDocuments(Term)

Dans tous les cas j'utilise correctement la fonction en demandant de supprimer les occurrences sur le champs id le tout en String pour garder cela simple. Rien n'y fait. J'ai bien vérifié de prendre la documentation disponible pour Lucene 3.0.1. L'ajout se fait sans difficulté mais la suppression et la modification (qui nécessite de supprimer puis de ré-ajouter) sont définitivement un cas de mal de tête dans mon cas.

Un exemple de code pour aider. Les champs m_ sont des membres de la classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
public void supprimerEntreeIndex(String champUnique, String identifiant)
            throws IOException {
        File f = new File(m_pathIndex);
        Directory index = SimpleFSDirectory.open(f);
 
        try {
            IndexReader ir = IndexReader.open(index);
 
            ir.deleteDocuments(new Term(champUnique, identifiant));
        } catch (IOException ioe) {
        }
 
/////////////////////////////////////
 
// La même entête jusqu'au try
            boolean doitCreerFichier = !f.exists();
            m_iw = new IndexWriter(index, m_analyser, doitCreerFichier,
                    IndexWriter.MaxFieldLength.UNLIMITED);
 
            // Les champs sur lesquels la recherche sera faite
            String[] fields={champUnique};
 
            Query q = new MultiFieldQueryParser(Version.LUCENE_30, fields,
                    m_analyser).parse(identifiant);
 
            m_iw.deleteDocuments(q);
            m_iw.commit();
 
/////////////////////////////////////
 
// La même entête jusqu'au try
            boolean doitCreerFichier = !f.exists();
            m_iw = new IndexWriter(index, m_analyser, doitCreerFichier,
                    IndexWriter.MaxFieldLength.UNLIMITED);
 
            m_iw.deleteDocuments(new Term(champUnique, identifiant));
            m_iw.commit();