[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