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

List:       kde-commits
Subject:    kdesupport/strigi/src/luceneindexer
From:       Jos van den Oever <jos () vandenoever ! info>
Date:       2009-01-21 10:28:11
Message-ID: 1232533691.075878.20854.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 914519 by vandenoever:

Use convenience functions for deleting entries.

CLucene has an easy function for deleting entries from the index.

 M  +12 -35    cluceneindexwriter.cpp  


--- trunk/kdesupport/strigi/src/luceneindexer/cluceneindexwriter.cpp #914518:914519
@@ -258,45 +258,22 @@
 CLuceneIndexWriter::deleteEntry(const string& entry,
         lucene::index::IndexReader* reader) {
     int deleted = 0;
-{
-    BooleanQuery* bq = _CLNEW BooleanQuery();
     wstring path(utf8toucs2(entry));
-
-    Term* t = _CLNEW Term(systemlocation(), path.c_str());
-    lucene::search::Query* q1 = new TermQuery(t);
-    _CLDECDELETE(t);
-    t = _CLNEW Term(parentlocation(), path.c_str());
-    lucene::search::Query* q2 = new TermQuery(t);
-    _CLDECDELETE(t);
-    bq->add(q1, true, false, false);
-    bq->add(q2, true, false, false);
-
-    IndexSearcher searcher(reader);
-    Hits* hits = 0;
-    int nhits = 0;
-    try {
-        hits = searcher.search(bq);
-        nhits = hits->length();
-    } catch (CLuceneError& err) {
-        fprintf(stderr, "could not query: %s\n", err.what());
-    }
-    for (int i = 0; i < nhits; ++i) {
-        int32_t id = hits->id(i);
-        if (!reader->isDeleted(id)) {
-            reader->deleteDocument(id);
-            deleted++;
-        }
-    }
-    if (hits) {
-        _CLDELETE(hits);
-    }
-    searcher.close();
-    _CLDELETE(bq);
-
-    // if we have not deleted anything up to now, we cannot delete more
+{
+    Term t(systemlocation(), path.c_str());
+    deleted += reader->deleteDocuments(&t);
+    // if no file was deleted, no more can be deleted
     if (deleted == 0) return;
 }
 {
+    Term t(parentlocation(), path.c_str());
+    deleted += reader->deleteDocuments(&t);
+
+    // if we have only deleted one file up to now, we cannot delete more
+    if (deleted < 2) return;
+}
+{
+    // delete all deeper nested files
     wstring v = utf8toucs2(entry+"/");
     Term* t = _CLNEW Term(parentlocation(), v.c_str());
     PrefixFilter* filter = _CLNEW PrefixFilter(t);
[prev in list] [next in list] [prev in thread] [next in thread] 

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