[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lucene-user
Subject:    RE: can't delete from an index using IndexReader.delete()
From:       Ian Lea <ian () digimem ! net>
Date:       2003-06-24 9:04:52
[Download RAW message or body]

You should use Field.Keyword rather than Field.Text for the identifier
because you do not want it tokenized.

      doc.add(Field.Keyword("id", whatever));

In 2 places in your example code.



--
Ian.
ian@digimem.net


> rob@koberg.com (Robert Koberg) wrote 
>
> Here is a simple class that can reproduce the problem (happens with the last
> stable release too). Let me know if you would prefer this as an attachment.
> 
> Call like this:
> java TestReaderDelete existing_id new_label
> - or -
> 
> Try:
> java TestReaderDelete B724547 ppppppp
> 
> and then try:
> java TestReaderDelete a266122794 ppppppp
> 
> If an index has not been created it will create one. Keep running the one of
> the above example commands (with and without deleting the index directory)
> and see what happens to the System.out.println's
> 
> 
> 
> import org.apache.lucene.index.IndexReader;
> import org.apache.lucene.index.Term;
> import org.apache.lucene.analysis.Analyzer;
> import org.apache.lucene.analysis.standard.StandardAnalyzer;
> import org.apache.lucene.index.IndexWriter;
> import org.apache.lucene.document.Document;
> import org.apache.lucene.document.Field;
> import org.apache.lucene.document.DateField;
> 
> import org.xml.sax.*;
> import org.xml.sax.helpers.*;
> import org.xml.sax.Attributes;
> import javax.xml.parsers.*;
> 
> import java.io.*;
> import java.util.*;
> 
> 
> class TestReaderDelete {
> 
>   
> 
>   public static void main(String[] args) 
>     throws IOException
>   {
>     File index = new File("./testindex");
>     if (!index.exists()) {
>       HashMap test_map = new HashMap();
>       test_map.put("preamble_content", "Preamble content bbb");
>       test_map.put("art_01_section_01", "Article 1, Section 1");
>       test_map.put("toc_tester", "Test TOC XML bbb");
>       test_map.put("B724547", "bio example");
>       test_map.put("a266122794", "tester");
>       indexFiles(index, test_map);
>     } 
>     String identifier = args[0];
>     String new_label = args[1];
>     testDeleteAndAdd(index, identifier, new_label);
>   }
>   
> 
>   public static void indexFiles(File index, HashMap test_map) 
>   {
>     try {
>       IndexWriter writer = new IndexWriter(index, new StandardAnalyzer(),
> true);
>       for (Iterator i=test_map.entrySet().iterator(); i.hasNext(); ) {
>         Map.Entry e = (Map.Entry) i.next();
> System.out.println("Adding: " + e.getKey() + " = " + e.getValue());
>         Document doc = new Document();
>         doc.add(Field.Text("id", (String)e.getKey()));      
>         doc.add(Field.Text("label", (String)e.getValue())); 
>         writer.addDocument(doc);
>       }
>       writer.optimize();
>       writer.close();
>     } catch (Exception e) {
>       System.out.println(" caught a " + e.getClass() +
> 			 "\n with message: " + e.getMessage());
>     }
>   }
>   
>   
>   public static void testDeleteAndAdd(File index, String identifier, String
> new_label) 
>     throws IOException
>   {
>     IndexReader reader = IndexReader.open(index);
> System.out.println("!!! reader.numDocs() : " + reader.numDocs());    
> System.out.println("reader.indexExists(): " + reader.indexExists(index));
> 
> System.out.println("term field: " + new Term("id", identifier).field());
> System.out.println("term text: " + new Term("id", identifier).text());
> System.out.println("reader.docFreq: " + reader.docFreq(new Term("id",
> identifier)));  
> System.out.println("deleting target now...");    
>     int deleted_num = reader.delete(new Term("id", identifier));
> System.out.println("*** deleted_num: " + deleted_num);    
>     reader.close();
>     try {
>       IndexWriter writer = new IndexWriter(index, new StandardAnalyzer(),
> false);
>       String ident = identifier;
>       Document doc = new Document();
>       doc.add(Field.Text("id", identifier));      
>       doc.add(Field.Text("label", new_label)); 
>       writer.addDocument(doc);
>       writer.optimize();
>       writer.close();
>     } catch (Exception e) {
>       System.out.println(" caught a " + e.getClass() +
> 			 "\n with message: " + e.getMessage());
>     }
> 
> System.out.println("!!! reader.numDocs() after deleting and adding : " +
> reader.numDocs()); 
>   }     
>   
> }
> 
> 
> 
> > -----Original Message-----
> > From: Otis Gospodnetic [mailto:otis_gospodnetic@yahoo.com]
> > Sent: Sunday, June 22, 2003 9:42 PM
> > To: Lucene Users List
> > 
> > The code looks fine.  Unfortunately, the provided code is not a full,
> > self-sufficient class that I can run on my machine to verify the
> > behaviour that you are describing.
> > 
> > Otis
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-user-help@jakarta.apache.org
> 
> 
----------------------------------------------------------------------
Searchable personal storage and archiving from http://www.digimem.net/



---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-user-help@jakarta.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic