Changeset 149

Show
Ignore:
Timestamp:
04/12/08 05:04:01 (8 months ago)
Author:
eric.dumin..@gmail.com
Message:

First time old specs pass with new implementation.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/rewrote_indexer/lib/picolena/templates/app/models/finder.rb

    r148 r149  
    119119   def self.force_index_creation 
    120120     #create_index(IndexedDirectories.keys) 
     121     Indexer.reset! 
    121122     Indexer.index_every_directory 
    122123   end 
  • branches/rewrote_indexer/lib/picolena/templates/app/models/index_writer.rb

    r148 r149  
    1 require 'singleton' 
    2 class IndexWriter 
    3   include Singleton   
     1class IndexWriter < Ferret::Index::IndexWriter 
     2  def initialize(params={}) 
     3    # Add needed parameters 
     4    params.merge!(:create_if_missing => true, :path => IndexSavePath, :analyzer => Analyzer) 
     5    # Ensure this directory exists 
     6    FileUtils.mkpath File.dirname(IndexSavePath) 
     7    # Creates the IndexWriter 
     8    super(params) 
     9    # Add required fields (content, filetype, probably_unique_id, ...) 
     10    add_fields! 
     11  end 
    412   
     13  def self.remove 
     14    Dir.glob(File.join(IndexSavePath,'*')).each{|f| FileUtils.rm(f) if File.file?(f)} 
     15  end 
    516   
    6    
    7    
     17  private 
     18  def add_fields! 
     19    # No need to re-create any field. 
     20    return unless field_infos.fields.empty? 
     21    field_infos.add_field(:complete_path, :store => :yes, :index => :yes) 
     22    field_infos.add_field(:content, :store => :yes, :index => :yes) 
     23    field_infos.add_field(:basename, :store => :no, :index => :yes, :boost => 1.5) 
     24    field_infos.add_field(:file, :store => :no, :index => :yes, :boost => 1.5) 
     25    field_infos.add_field(:filetype, :store => :no, :index => :yes, :boost => 1.5) 
     26    field_infos.add_field(:date, :store=>:yes, :index=>:yes) 
     27    field_infos.add_field(:probably_unique_id, :store=>:no, :index=>:yes) 
     28  end  
    829end 
  • branches/rewrote_indexer/lib/picolena/templates/app/models/indexer.rb

    r148 r149  
    1 #require 'singleton' 
    2  
    31class Indexer 
    42  Exclude = /(Thumbs\.db)/ 
    53   
    6   #include Singleton 
    74  def self.index_every_directory 
    85    log :debug => "Indexing every directory" 
    9     IndexedDirectories.each{|dir, alias_dir| 
    10       index_directory(dir) 
    11     } 
     6    begin 
     7      IndexedDirectories.each{|dir, alias_dir| 
     8        index_directory(dir) 
     9      } 
     10      writer.optimize 
     11    ensure 
     12      writer.close 
     13    end 
    1214  end 
    1315   
     
    1618    Dir.glob(File.join(dir,"**/*")){|filename| 
    1719      if File.file?(filename) && filename !~ Exclude then 
    18         index_file(filename) 
     20        mime_type = File.mime(filename) 
     21        begin 
     22          index_file(filename, mime_type) 
     23        rescue => e 
     24          log :debug => "indexing without content: #{e.message}" 
     25          index_file(filename) 
     26        end 
    1927      end 
    2028    } 
    2129  end 
    2230   
    23   def self.index_file(filename
     31  def self.index_file(filename,mime_type = nil
    2432    log :debug => "Indexing #{filename}" 
     33     
     34    complete_path=File.expand_path(filename) 
     35     
     36    fields = { 
     37      :complete_path=> complete_path, 
     38      :probably_unique_id => complete_path.base26_hash, 
     39      :file => File.basename(filename), 
     40      :basename => File.basename(filename, File.extname(filename)).gsub(/_/,' '), 
     41      :filetype => File.extname(filename), 
     42      :date => File.mtime(filename).strftime("%Y%m%d%H%M") 
     43    } 
     44     
     45    if mime_type then 
     46      text = PlainText.extract_content_from(filename) 
     47      raise "empty document #{filename}" if text.strip.empty? 
     48      fields[:content] = text 
     49    end 
     50     
     51    writer << fields 
     52  end 
     53   
     54  def self.writer 
     55    @@writer ||= IndexWriter.new 
     56  end 
     57   
     58  def self.reset! 
     59    log :debug => "Resetting Index" 
     60    @@writer=nil 
     61    IndexWriter.remove 
    2562  end 
    2663   
     
    3067    hash.each{|level,message| 
    3168      puts "#{level} -> #{message}" 
    32       IndexerLogger.send(level,message) 
     69      #IndexerLogger.send(level,message) 
    3370    } 
    3471  end