Changeset 153
- Timestamp:
- 04/12/08 12:19:09 (7 months ago)
- Files:
-
- branches/rewrote_indexer/lib/picolena/templates/app/models/document.rb (modified) (2 diffs)
- branches/rewrote_indexer/lib/picolena/templates/app/models/finder.rb (modified) (5 diffs)
- branches/rewrote_indexer/lib/picolena/templates/app/models/index_reader.rb (modified) (2 diffs)
- branches/rewrote_indexer/lib/picolena/templates/app/models/indexer.rb (modified) (2 diffs)
- branches/rewrote_indexer/lib/picolena/templates/lib/tasks/index.rake (modified) (1 diff)
- branches/rewrote_indexer/lib/picolena/templates/spec/models/basic_finder_spec.rb (modified) (3 diffs)
- branches/rewrote_indexer/lib/picolena/templates/spec/models/filters_spec.rb (modified) (1 diff)
- branches/rewrote_indexer/lib/picolena/templates/spec/models/finder_spec.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/rewrote_indexer/lib/picolena/templates/app/models/document.rb
r151 r153 67 67 def cached 68 68 get_index_id! unless index_id 69 Finder.index[index_id][:content]69 IndexReader.new[index_id][:content] 70 70 end 71 71 … … 74 74 def date 75 75 get_index_id! unless index_id 76 Finder.index[index_id][:date].sub(/(\d{4})(\d{2})(\d{2})/,'\1-\2-\3')76 IndexReader.new[index_id][:date].sub(/(\d{4})(\d{2})(\d{2})/,'\1-\2-\3') 77 77 end 78 78 79 79 def mtime 80 80 get_index_id! unless index_id 81 Finder.index[index_id][:date].to_i81 IndexReader.new[index_id][:date].to_i 82 82 end 83 83 branches/rewrote_indexer/lib/picolena/templates/app/models/finder.rb
r152 r153 4 4 attr_reader :query 5 5 6 def self.index6 def index 7 7 # caching index @@index ||= 8 8 # causes ferret-0.11.6/lib/ferret/index.rb:768: [BUG] Segmentation fault 9 Ferret::Index::Index.new(:path => IndexSavePath, :analyzer=>Analyzer)9 IndexReader.new 10 10 end 11 11 … … 13 13 @query = Query.extract_from(raw_query) 14 14 @raw_query= raw_query 15 Finder.ensure_that_index_exists_on_disk15 IndexReader.ensure_existence 16 16 @per_page=results_per_page 17 17 @offset=(page.to_i-1)*results_per_page 18 validate_that_index_has_documents18 index.validate_that_has_documents 19 19 end 20 20 … … 22 22 @matching_documents=[] 23 23 start=Time.now 24 top_docs= Finder.index.search(query, :limit => @per_page, :offset=>@offset)24 top_docs=index.search(query, :limit => @per_page, :offset=>@offset) 25 25 top_docs.hits.each{|hit| 26 26 index_id,score=hit.doc,hit.score 27 27 begin 28 found_doc=Document.new( Finder.index[index_id][:complete_path])29 found_doc.matching_content= Finder.index.highlight(query, index_id,28 found_doc=Document.new(index[index_id][:complete_path]) 29 found_doc.matching_content=index.highlight(query, index_id, 30 30 :field => :content, :excerpt_length => 80, 31 31 :pre_tag => "<<", :post_tag => ">>" … … 60 60 } 61 61 62 # Returns true if index is existing.63 def self.has_index?64 index_filename and File.exists?(index_filename)65 end66 67 # Returns true if there's at least one document indexed.68 def has_documents?69 Finder.index.size>070 end71 72 62 # Returns matching document for any given query only if 73 63 # exactly one document is found. … … 83 73 end 84 74 end 85 86 private87 88 def self.index_filename89 Dir.glob(File.join(IndexSavePath,'*.cfs')).first90 end91 92 def self.ensure_that_index_exists_on_disk93 force_index_creation unless has_index? or RAILS_ENV=="production"94 end95 96 def self.force_index_creation97 #Index every directory, without updating.98 Indexer.index_every_directory(false)99 end100 101 def self.delete_index102 FileUtils.rm(Dir.glob(File.join(IndexSavePath,'*.cfs'))) if has_index?103 end104 105 def validate_that_index_has_documents106 raise IndexError, "no document found" unless has_documents?107 end108 75 end branches/rewrote_indexer/lib/picolena/templates/app/models/index_reader.rb
r151 r153 13 13 end 14 14 15 def document(complete_path)16 search_by_complete_path(path)17 end18 19 def cached_mtime(complete_path)20 21 end22 23 15 def search_by_complete_path(complete_path) 24 16 search('complete_path:"'<<complete_path<<'"') … … 30 22 } 31 23 end 24 25 26 # Validation methods. 27 28 def validate_that_has_documents 29 raise IndexError, "no document found" unless has_documents? 30 end 31 32 # Returns true if there's at least one document indexed. 33 def has_documents? 34 size>0 35 end 36 37 class<<self 38 39 def ensure_existence 40 Indexer.index_every_directory(update=false) unless exists? or RAILS_ENV=="production" 41 end 42 43 def exists? 44 filename and File.exists?(filename) 45 end 46 47 def filename 48 Dir.glob(File.join(IndexSavePath,'*.cfs')).first 49 end 50 end 32 51 end branches/rewrote_indexer/lib/picolena/templates/app/models/indexer.rb
r152 r153 12 12 :date => File.mtime(complete_path).strftime("%Y%m%d%H%M%S") 13 13 } 14 end 15 14 end 15 16 16 def index_every_directory(update=true) 17 17 log :debug => "Indexing every directory" … … 100 100 def log(hash) 101 101 hash.each{|level,message| 102 #puts "#{level} -> #{message}"102 puts "#{level} -> #{message}" 103 103 IndexerLogger.send(level,message) 104 104 } branches/rewrote_indexer/lib/picolena/templates/lib/tasks/index.rake
r152 r153 3 3 desc 'Clear indexes' 4 4 task :clear => :environment do 5 Dir.glob(File.join(IndexesSavePath,'/**/*')).each{|f| FileUtils.rm(f) if File.file?(f)}5 IndexWriter.remove 6 6 end 7 7 branches/rewrote_indexer/lib/picolena/templates/spec/models/basic_finder_spec.rb
r140 r153 11 11 12 12 before(:each) do 13 Finder.delete_index13 IndexWriter.remove 14 14 end 15 15 16 16 it "should create index" do 17 17 IndexedDirectories.replace({'spec/test_dirs/indexed/just_one_doc'=>'//justonedoc/'}) 18 lambda {@finder_with_new_index=Finder.new("test moi")}.should change( Finder, :has_index?).from(false).to(true)18 lambda {@finder_with_new_index=Finder.new("test moi")}.should change(IndexReader, :exists?).from(false).to(true) 19 19 File.exists?(File.join(@new_index_path,'_0.cfs')).should be_true 20 Finder.index.size.should >020 IndexReader.new.size.should >0 21 21 end 22 22 … … 45 45 describe "Basic Finder" do 46 46 before(:all) do 47 Finder.force_index_creation47 Indexer.index_every_directory(update=false) 48 48 end 49 49 … … 83 83 fields.each_pair do |description,field_name| 84 84 it "should index #{description} as :#{field_name}" do 85 Finder.index.field_infos[field_name].should be_an_instance_of(Ferret::Index::FieldInfo)85 IndexReader.new.field_infos[field_name].should be_an_instance_of(Ferret::Index::FieldInfo) 86 86 end 87 87 end branches/rewrote_indexer/lib/picolena/templates/spec/models/filters_spec.rb
r81 r153 3 3 describe "Filters" do 4 4 before(:all) do 5 Finder.ensure_that_index_exists_on_disk5 IndexReader.ensure_existence 6 6 end 7 7 branches/rewrote_indexer/lib/picolena/templates/spec/models/finder_spec.rb
r140 r153 22 22 File.utime(0, a_bit_later, 'spec/test_dirs/indexed/yet_another_dir/office2003-word-template.dot') 23 23 File.utime(0, nineties, 'spec/test_dirs/indexed/others/placeholder.txt') 24 Finder.force_index_creation24 Indexer.index_every_directory(update=false) 25 25 end 26 26 … … 48 48 49 49 it "should give a boost to basename, filename and filetype in index" do 50 Finder.index.field_infos[:basename].boost.should > 1.0 51 Finder.index.field_infos[:file].boost.should > 1.0 52 Finder.index.field_infos[:filetype].boost.should > 1.0 50 index=IndexReader.new 51 index.field_infos[:basename].boost.should > 1.0 52 index.field_infos[:file].boost.should > 1.0 53 index.field_infos[:filetype].boost.should > 1.0 53 54 end 54 55
