Changeset 335
- Timestamp:
- 03/15/08 03:04:12 (8 months ago)
- Location:
- trunk
- Files:
-
- 4 modified
-
thrudex/src/CLuceneIndex.cpp (modified) (14 diffs)
-
thrudex/src/CLuceneIndex.h (modified) (2 diffs)
-
thrudex/src/UpdateFilter.cpp (modified) (1 diff)
-
tutorial/perl/BookmarkExample.pl (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/thrudex/src/CLuceneIndex.cpp
r327 r335 35 35 }; 36 36 37 //Used to clean up 38 struct reader_deleter 39 { 40 void operator()(void const *o) const { 41 IndexReader *r = (IndexReader *)o; 42 43 r->close(); 44 delete r; 45 } 46 }; 47 37 48 CLuceneIndex::CLuceneIndex(const string &index_root, const string &index_name, shared_ptr<Analyzer> analyzer) 38 49 : index_root(index_root), index_name(index_name), analyzer(analyzer), filter_space(10000000), last_synched(0), syncing(false) … … 75 86 //build up bloom filter 76 87 disk_bloom = shared_ptr<bloom_filter>(new bloom_filter(filter_space,1.0/(1.0 * filter_space), random_seed)); 77 disk_reader = shared_ptr<IndexReader>(IndexReader::open(idx_path.c_str()) );88 disk_reader = shared_ptr<IndexReader>(IndexReader::open(idx_path.c_str()), reader_deleter() ); 78 89 disk_filter = shared_ptr<UpdateFilter>(new UpdateFilter(disk_reader)); 79 90 … … 211 222 shared_ptr<set<string> > l_disk_deletes = disk_deletes; 212 223 shared_ptr<UpdateFilter> l_disk_filter = disk_filter; 224 shared_ptr<IndexReader> l_disk_reader = disk_reader; 213 225 214 226 wstring wkey = build_wstring(key); … … 249 261 shared_ptr<set<string> > l_disk_deletes = disk_deletes; 250 262 shared_ptr<UpdateFilter> l_disk_filter = disk_filter; 263 shared_ptr<IndexReader> l_disk_reader = disk_reader; 251 264 252 265 wstring wkey = build_wstring(key); … … 255 268 //We'll simply track the docs to remove on next merge 256 269 if( l_disk_bloom->contains( key )){ 257 LOG4CXX_DEBUG(logger, "Removed "+key);270 LOG4CXX_DEBUG(logger, "Removed disk"+key); 258 271 l_disk_deletes->insert( key ); 259 272 … … 267 280 if(l_ram_bloom->contains( key )){ 268 281 282 LOG4CXX_DEBUG(logger, "Removed ram"+key); 283 269 284 Term *t = new Term(DOC_KEY, wkey.c_str() ); 270 285 … … 276 291 delete t; 277 292 } 293 278 294 } 279 295 … … 298 314 shared_ptr<IndexSearcher> l_disk_searcher; 299 315 shared_ptr<UpdateFilter> l_disk_filter; 316 shared_ptr<IndexReader> l_disk_reader; 300 317 shared_ptr<MultiSearcher> l_searcher; 301 318 //RWGuard g(mutex); … … 315 332 316 333 l_disk_filter = disk_filter; 334 l_disk_reader = disk_reader; 317 335 318 336 } … … 464 482 //RWGuard g(mutex); 465 483 Guard g(mutex); 466 if(last_modified <= last_synched )484 if(last_modified <= last_synched && disk_deletes->empty()) 467 485 return; 468 486 } … … 510 528 LOG4CXX_DEBUG(logger,"Created Handles"); 511 529 512 //Now we start by deleting any updated docs from disk 513 514 shared_ptr<IndexReader> disk_reader(IndexReader::open(idx_path.c_str())); 515 516 set<string>::iterator it; 517 for( it=l_disk_deletes->begin(); it!=l_disk_deletes->end(); ++it){ 518 519 wstring wkey = build_wstring(*it); 520 Term *t = new Term(DOC_KEY, wkey.c_str() ); 521 522 disk_reader->deleteDocuments(t); 523 524 LOG4CXX_DEBUG(logger,"Deleted"+(*it)); 525 526 delete t; 527 } 528 529 disk_reader->close(); 530 531 LOG4CXX_DEBUG(logger,"Deleted old ids"); 530 { 531 //Now we start by deleting any updated docs from disk 532 shared_ptr<IndexReader> tmp_disk_reader(IndexReader::open(idx_path.c_str())); 533 534 int i=0; 535 set<string>::iterator it; 536 for( it=l_disk_deletes->begin(); it!=l_disk_deletes->end(); ++it){ 537 538 wstring wkey = build_wstring(*it); 539 Term *t = new Term(DOC_KEY, wkey.c_str() ); 540 541 tmp_disk_reader->deleteDocuments(t); 542 543 LOG4CXX_DEBUG(logger,"Deleted"+(*it)); 544 545 delete t; 546 i++; 547 } 548 549 tmp_disk_reader->close(); 550 551 LOG4CXX_DEBUG(logger,"Deleted old ids"); 552 } 553 532 554 533 555 { … … 552 574 553 575 //Search new index (big perf hit so get it over now) 554 shared_ptr<IndexReader> l_disk_reader(IndexReader::open(idx_path.c_str())); 555 shared_ptr<IndexSearcher> l_disk_searcher(new IndexSearcher(l_disk_reader.get())); 556 shared_ptr<UpdateFilter> l_disk_filter(new UpdateFilter(l_disk_reader)); 576 shared_ptr<IndexReader> l_disk_reader( IndexReader::open(idx_path.c_str()), reader_deleter() ); 577 shared_ptr<IndexSearcher> l_disk_searcher( new IndexSearcher(l_disk_reader.get()) ); 557 578 558 579 … … 560 581 561 582 Query *query = QueryParser::parse( q.c_str(),DOC_KEY,analyzer.get()); 562 Hits *h= l_disk_searcher->search(query);583 Hits *h = l_disk_searcher->search(query); 563 584 _CLDELETE(h); 564 585 _CLDELETE(query); … … 571 592 Guard g(mutex); 572 593 594 //the order of these things really matters 595 disk_searcher = l_disk_searcher; 596 disk_reader = l_disk_reader; 597 disk_filter.reset( new UpdateFilter(disk_reader) ); 598 599 573 600 //Add any new deletes to the filter 574 601 set<string>::iterator it; 575 602 for( it=disk_deletes->begin(); it!=disk_deletes->end(); ++it){ 576 603 wstring wkey = build_wstring(*it); 577 l_disk_filter->skip(wkey); 604 605 LOG4CXX_DEBUG(logger,"Skipping sync:"+*it); 606 disk_filter->skip(wkey); 578 607 } 579 608 580 disk_reader = l_disk_reader;581 disk_filter = l_disk_filter;582 disk_searcher = l_disk_searcher;583 584 609 585 610 last_synched = Util::currentTime(); 586 611 587 612 syncing = false; //this flag alters the search code to include prev searcher 588 } 589 590 613 614 } 591 615 592 616 LOG4CXX_DEBUG(logger,"Set new search"); 593 594 } 617 } -
trunk/thrudex/src/CLuceneIndex.h
r327 r335 74 74 75 75 boost::shared_ptr<lucene::index::IndexModifier> modifier; 76 int64_tlast_modified;76 volatile int64_t last_modified; 77 77 78 78 boost::shared_ptr<lucene::search::MultiSearcher> searcher; … … 80 80 81 81 int64_t last_synched; 82 boolsyncing;82 volatile bool syncing; 83 83 84 84 boost::shared_ptr<lucene::index::IndexReader> disk_reader; -
trunk/thrudex/src/UpdateFilter.cpp
r299 r335 42 42 void UpdateFilter::skip( wstring key ) 43 43 { 44 Term *t = new Term(DOC_KEY, key.c_str() ); 45 TermEnum *enumerator = reader->terms(t); 44 45 TermEnum *enumerator; 46 Term *t; 47 try{ 48 t = new Term(DOC_KEY, key.c_str() ); 49 enumerator = reader->terms(t); 46 50 if (enumerator->term(false) == NULL){ 47 51 _CLDELETE(enumerator); 48 52 delete t; 49 53 return; 54 } 55 }catch(CLuceneError e){ 56 cerr<<"!!!Caught Fatal CLucene Exception: "<<e.what()<<endl; 50 57 } 51 58 -
trunk/tutorial/perl/BookmarkExample.pl
r271 r335 99 99 100 100 $transport->open(); 101 102 $self->{thrudoc}->admin("create_bucket", THRUDOC_BUCKET()); 101 103 }; if($@) { 102 104 die $@->{message} if UNIVERSAL::isa($@,"Thrift::TException"); … … 242 244 #chunks of 100 243 245 my $limit = 100; 246 my $i = 0; 244 247 my $r; 245 248 my $seed; … … 267 270 $seed = $r->{seed}; 268 271 272 $i += @{$r->elements}; 273 269 274 }while(@{$r->elements} == $limit); 270 275 … … 272 277 my $t1 = gettimeofday(); 273 278 274 print "\n*Index cleared in: ".($t1-$t0)."*\n";279 print "\n*Index cleared($i) in: ".($t1-$t0)."*\n"; 275 280 276 281 } … … 322 327 }else{ 323 328 324 warn($r-> ex->what);329 warn($r->{ex}->{what}); 325 330 } 326 331 … … 375 380 376 381 my ($t0,$t1); 382 383 377 384 eval{ 378 385 … … 386 393 387 394 };if($@){ 395 396 warn(Dumper($@)); 388 397 die $@->{message} if UNIVERSAL::isa($@,"Thrift::TException"); 389 398 die $@; 390 399 } 400
