Changeset 258

Show
Ignore:
Timestamp:
04/25/08 02:57:46 (7 months ago)
Author:
eric.dumin..@gmail.com
Message:

No need for IndexWriter? anymore.
Index is enough!

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/picolena/templates/app/models/indexer.rb

    r247 r258  
    1616      } 
    1717      log :debug => "Now optimizing index" 
    18       writer.optimize 
     18      index.optimize 
    1919      log :debug => "Indexing done in #{Time.now-start} s." 
    2020    end 
     
    3030      indexing_list_chunks=indexing_list.in_transposed_slices(threads_number) 
    3131       
    32       # It initializes an IndexWriter before launching multithreaded 
     32      # It initializes the Index before launching multithreaded 
    3333      # indexing. Otherwise, two threads could try to instantiate 
    3434      # an IndexWriter at the same time, and get a 
    3535      #  Ferret::Store::Lock::LockError 
    36       writer 
     36      index 
    3737       
    3838      indexing_list_chunks.each_with_thread{|chunk| 
     
    5454        document = default_fields 
    5555      end 
    56       writer << document 
     56      index << document 
    5757    end 
    5858     
    59     # Ensures writer is closed, and removes every index file for RAILS_ENV. 
     59    # Ensures index is closed, and removes every index file for RAILS_ENV. 
    6060    def clear!(all=false) 
    6161      close 
     
    6464    end 
    6565     
    66     # Closes the writer and 
    67     # ensures that a new IndexWriter is instantiated next time writer is called. 
     66    # Closes the index and 
     67    # ensures that a new Index is instantiated next time index is called. 
    6868    def close 
    69       @@writer.close rescue nil 
     69      @@index.close rescue nil 
    7070      # Ferret will SEGFAULT otherwise. 
    71       @@writer = nil 
     71      @@index = nil 
    7272    end 
    7373     
    7474    # Only one IndexWriter should be instantiated. 
    75     # If one already exists, returns it. 
     75    # If one index already exists, returns it. 
    7676    # Creates it otherwise. 
    77     def writer 
    78       @@writer ||= Ferret::Index::IndexWriter.new(default_index_params) 
    79     end 
    80      
    8177    def index 
    82       Ferret::Index::Index.new(default_index_params)   
     78      @@index ||= Ferret::Index::Index.new(default_index_params)   
    8379    end 
    8480     
    8581    def ensure_index_existence 
    8682      index_every_directory(:remove_first) unless index_exists? or RAILS_ENV=="production" 
     83    end 
     84     
     85    def doc_count 
     86      index.writer.doc_count 
    8787    end 
    8888     
     
    104104     
    105105    def default_index_params 
    106       {:path => Picolena::IndexSavePath, :analyzer => Picolena::Analyzer, :field_infos => default_field_infos} 
     106      { 
     107        :path        => Picolena::IndexSavePath, 
     108        :analyzer    => Picolena::Analyzer, 
     109        :field_infos => default_field_infos, 
     110        # Great way to ensure that no file is indexed twice! 
     111        :key         => :complete_path 
     112        } 
    107113    end 
    108114