Changeset 149
- Timestamp:
- 04/12/08 05:04:01 (8 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/rewrote_indexer/lib/picolena/templates/app/models/finder.rb
r148 r149 119 119 def self.force_index_creation 120 120 #create_index(IndexedDirectories.keys) 121 Indexer.reset! 121 122 Indexer.index_every_directory 122 123 end branches/rewrote_indexer/lib/picolena/templates/app/models/index_writer.rb
r148 r149 1 require 'singleton' 2 class IndexWriter 3 include Singleton 1 class 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 4 12 13 def self.remove 14 Dir.glob(File.join(IndexSavePath,'*')).each{|f| FileUtils.rm(f) if File.file?(f)} 15 end 5 16 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 8 29 end branches/rewrote_indexer/lib/picolena/templates/app/models/indexer.rb
r148 r149 1 #require 'singleton'2 3 1 class Indexer 4 2 Exclude = /(Thumbs\.db)/ 5 3 6 #include Singleton7 4 def self.index_every_directory 8 5 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 12 14 end 13 15 … … 16 18 Dir.glob(File.join(dir,"**/*")){|filename| 17 19 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 19 27 end 20 28 } 21 29 end 22 30 23 def self.index_file(filename )31 def self.index_file(filename,mime_type = nil) 24 32 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 25 62 end 26 63 … … 30 67 hash.each{|level,message| 31 68 puts "#{level} -> #{message}" 32 IndexerLogger.send(level,message)69 #IndexerLogger.send(level,message) 33 70 } 34 71 end
