Thanks Dave, I think I understand now ... 

FWIW, the following script works now I have read your responses. I've
posted it here for others to read.

==================

require 'rubygems'
require 'ferret'

p Ferret::VERSION

@dir = Ferret::Store::RAMDirectory.new
@writer = Ferret::Index::IndexWriter.new(:dir => @dir)
@searcher = Ferret::Search::Searcher.new(@dir) 
@parser = Ferret::QueryParser.new

@docs = []
@docs << {:id =>  1, :name => 'Fred',       :occupation => 'Toon'}
@docs << {:id =>  2, :name => 'Barney',     :occupation => 'Toon'}
@docs << {:id =>  3, :name => 'Wilma',      :occupation => 'Toon'}
@docs << {:id =>  4, :name => 'Betty',      :occupation => 'Toon'}
@docs << {:id =>  5, :name => 'Pebbles',    :occupation => 'Toon'}

@docs << {:id =>  6, :name => 'Superman',   :occupation => 'Hero'}
@docs << {:id =>  7, :name => 'Batman',     :occupation => 'Hero'}
@docs << {:id =>  8, :name => 'Spiderman',  :occupation => 'Hero'}
@docs << {:id =>  9, :name => 'Green Lantern', :occupation => 'Hero'}
@docs << {:id => 10, :name => 'Dr Strange', :occupation => 'Hero'}

@docs << {:id => 11, :name => 'Phantom',    :occupation => 'Hero'}

#populate index over time
t1 = Thread.new do  
  @docs.each do |doc|    
    p "t1: adding #{doc[:id]} to index"
    @writer << doc       
    sleep(10)
  end
end   

#search for heroes over time
t2 = Thread.new do  
  query_txt = 'occupation:hero'
  query = @parser.parse(query_txt)
  while true do
    hits = @searcher.search(query)
    p "t2: searching for #{query_txt} found #{hits.total_hits}"    
    return if hits.total_hits == 6
    
    sleep(5)
  end
end

#search for toons over time
t3 = Thread.new do  
  query_txt = 'occupation:toon'
  query = @parser.parse(query_txt)
  while true do
    hits = @searcher.search(query)
    p "t3: searching for #{query_txt} found #{hits.total_hits}"    
    return if hits.total_hits == 5
    
    sleep(5)
  end
end   
   
t1.join; t2.join; t3.join

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of David Balmain
Sent: Wednesday, 6 September 2006 4:43 PM
To: [email protected]
Subject: Re: [Ferret-talk] Help with Multiple Readers, 1 Writer scenario

On 9/6/06, Neville Burnell <[EMAIL PROTECTED]> wrote:
> I've whipped up this script to demonstrate what I'm trying [and 
> failing] to achieve. The idea is that thread t1 adds docs to the index

> over time, while threads t2 and t3 search the same index for the new
docs.
> Unfortunately the script doesn't work, as t2 and t3 don't find the 
> docs that t1 has added.
>
> Can anyone point out where I am going wrong. Thanks so much.

Please let me know if the first paragraph of my previous email doesn't
explain this.

Cheers,
Dave
_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk
_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to