Oddness when adding to index -

I was having some odd results when working with acts_as_ferret (current
trunk), so I decided to test with the current version of ferret to see
if I encountered the same problem. I did. Here are the details:

installed ferret 0.10.10 on debian sarge with ‘sudo gem install ferret’
(btw, same results on OSX)

opened up an irb session:

irb(main):001:0> require ‘rubygems’
=> true
irb(main):002:0> require ‘ferret’
=> true
irb(main):003:0> include Ferret
=> Object

irb(main):004:0> i = Ferret::I.new
=> #<Ferret::Index::Index:0xb77dc1f4 @options={:default_field=>:,
:dir=>#Ferret::Store::RAMDirectory:0xb77dc1b8,
:analyzer=>#Ferret::Analysis::StandardAnalyzer:0xb77dc0c8,
:lock_retry_time=>2}, @mon_entering_queue=[], @qp=nil, @searcher=nil,
@mon_count=0, @default_field=:
, @close_dir=true, @auto_flush=false,
@open=true, @mon_owner=nil, @id_field=:id, @reader=nil,
@mon_waiting_queue=[], @writer=nil, @default_input_field=:id,
@dir=#Ferret::Store::RAMDirectory:0xb77dc1b8>

*** Now let’s add 3 strings to the index ***

irb(main):005:0> [“While you were out pet care”, “Eastside dog walker”,
“Top daw
g dog walker”].each {|text| i << text }
=> [“While you were out pet care”, “Eastside dog walker”, “Top dawg dog
walker”]

*** Now let’s do some searches ***

irb(main):006:0> puts i.search(‘pet’)
TopDocs: total_hits = 1, max_score = 0.878416 [
0 “While you were out pet care”: 0.878416
]
=> nil

irb(main):007:0> puts i.search(‘dog’)
TopDocs: total_hits = 2, max_score = 0.500000 [
1 “Eastside dog walker”: 0.500000
2 “Top dawg dog walker”: 0.500000
]
=> nil

irb(main):008:0> puts i.search(‘dawg’)
TopDocs: total_hits = 1, max_score = 0.702733 [
2 “Top dawg dog walker”: 0.702733
]
=> nil

irb(main):010:0> puts i.search(‘cat’)
TopDocs: total_hits = 0, max_score = 0.000000 [
]
=> nil

*** The previous 4 searches gave expected results. Notice that search
for ‘cat’ returned nothing (as it should) ***

*** Let’s add some more strings to the index. They are the same, but
does it matter? ***

irb(main):010:0> [“While you were out pet care”, “Eastside dog walker”,
“Top dawg
g dog walker”].each { |text| i << text }
=> [“While you were out pet care”, “Eastside dog walker”, “Top dawg dog
walker”]
irb(main):011:0> [“While you were out pet care”, “Eastside dog walker”,
“Top dawg
g dog walker”].each { |text| i << text }

*** Once again, do a search for ‘cat’. ***

puts i.search(‘cat’)
TopDocs: total_hits = 2, max_score = 1.395880 [
2 “Top dawg dog walker”: 1.395880
5 “Top dawg dog walker”: 1.395880
]
=> nil

*** The last search returned two results for ‘cat’, which is incorrect


It seems I can add any number of items to an index once without a
problem. However, once I add more items to the index, I start getting
incorrect resuts. Can anybody shed some light on the issue? Any help
would be appreciated.

On 10/10/06, Chris K. [email protected] wrote:

irb(main):001:0> require ‘rubygems’
:lock_retry_time=>2}, @mon_entering_queue=[], @qp=nil, @searcher=nil,
=> [“While you were out pet care”, “Eastside dog walker”, "Top dawg dog
irb(main):007:0> puts i.search(‘dog’)
=> nil
does it matter? ***

*** The last search returned two results for ‘cat’, which is incorrect


It seems I can add any number of items to an index once without a
problem. However, once I add more items to the index, I start getting
incorrect resuts. Can anybody shed some light on the issue? Any help
would be appreciated.

Hi Chris,
That is definitely a bug. I’ll look into it.

Cheers,
Dave

On 10/10/06, David B. [email protected] wrote:

It seems I can add any number of items to an index once without a

Yep, that was a bug introduced in verion 0.10.10. I’ll get a new gem
up ASAP. You can get the fixed code from subversion right now if you
are in a hurry.

David B. wrote:

On 10/10/06, David B. [email protected] wrote:

It seems I can add any number of items to an index once without a

Yep, that was a bug introduced in verion 0.10.10. I’ll get a new gem
up ASAP. You can get the fixed code from subversion right now if you
are in a hurry.

David,
Thanks for the feedback. Will the gem that includes the fix be 0.10.11?

Hi Chris,

can’t reproduce this on windows and ferret 0.10.9.

The following snippet gives these results:

TopDocs: total_hits = 1, max_score = 0.878416 [
0: 0.878416
]
TopDocs: total_hits = 2, max_score = 0.500000 [
1: 0.500000
2: 0.500000
]
TopDocs: total_hits = 1, max_score = 0.702733 [
2: 0.702733
]
TopDocs: total_hits = 0, max_score = 0.000000 [
]
TopDocs: total_hits = 0, max_score = 0.000000 [
]

Snippet:

require ‘rubygems’
require ‘ferret’
include Ferret
i = Ferret::I.new

[“While you were out pet care”, “Eastside dog walker”,
“Top dawg dog walker”].each {|text| i << text }

puts i.search(‘pet’)

puts i.search(‘dog’)

puts i.search(‘dawg’)

puts i.search(‘cat’)

Let’s add some more strings to the index.

[“While you were out pet care”, “Eastside dog walker”,
“Top dawg dog walker”].each {|text| i << text }

[“While you were out pet care”, “Eastside dog walker”,
“Top dawg dog walker”].each {|text| i << text }

puts i.search(‘cat’)


So things seem to work as expected.

You might try two things before further investigation:

  1. run the script outside of irb: Does it give you the same (wrong)
    results?
  2. gem uninstall ferret and gem install ferret to make sure you are
    using
    solely the latest version of ferret

Cheers,
Jan

On 10/10/06, Chris K. [email protected] wrote:

David B. wrote:

On 10/10/06, David B. [email protected] wrote:

It seems I can add any number of items to an index once without a

Yep, that was a bug introduced in verion 0.10.10. I’ll get a new gem
up ASAP. You can get the fixed code from subversion right now if you
are in a hurry.

David,
Thanks for the feedback. Will the gem that includes the fix be 0.10.11?

Yep. I wanted to get it out today but I still have some testing to do
so it’ll have to wait until tomorrow. It’ll definitely be out in the
next 24 hours.

Dave