Hi! I faced some issue while using it for dynamic attrs indexing/search. Maybe I made something wrong. Here is test method. Everything works just fine until last line http://pastie.caboo.se/66274 . Tested on both stable and trunk of aaf and ferret 0.11.4. the short version of code below: Contact.acts_as_ferret :fields => [ :first_name ] assert Contact.find(:first).respond_to?(:first_name_to_ferret) assert_equal 1, Contact.find_by_contents(''Y*'').total_hits assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits Contact.aaf_index.close FileUtils.rm_rf ''index'' Contact.acts_as_ferret :fields => [ :first_name, :last_name ] assert Contact.find(:first).respond_to?(:last_name_to_ferret) assert_equal 1, Contact.find_by_contents(''Y*'').total_hits assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits assert_equal 1, Contact.find_by_contents(''K*'').total_hits # assertion fails here: get 0 instead of 1 !! Maybe there is any better solution to add new fields to existing index? Best regards, Yury Kotlyarov -- Posted via http://www.ruby-forum.com/.
Hi! I faced some issue while using it for dynamic attrs indexing/search. Maybe I made something wrong. Here is test method. Everything works just fine until last line http://pastie.caboo.se/66274 . Tested on both stable and trunk of aaf and ferret 0.11.4. the short version of code below: Contact.acts_as_ferret :fields => [ :first_name ] assert Contact.find(:first).respond_to?(:first_name_to_ferret) assert_equal 1, Contact.find_by_contents(''Y*'').total_hits assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits Contact.aaf_index.close FileUtils.rm_rf ''index'' Contact.acts_as_ferret :fields => [ :first_name, :last_name ] assert Contact.find(:first).respond_to?(:last_name_to_ferret) assert_equal 1, Contact.find_by_contents(''Y*'').total_hits assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits assert_equal 1, Contact.find_by_contents(''K*'').total_hits # assertion fails here: get 0 instead of 1 !! Maybe there is any better solution to add new fields to existing index? -- Best regards, Yury Kotlyarov <;-) BrainHouse web: http://www.brainhouse.ru email: yura at brainhouse.ru
send all code we have so far and full test case code. --- model: contact.rb class Contact < ActiveRecord::Base end --- migration: 001_create_contacts_table.rb class CreateContacts < ActiveRecord::Migration def self.up create_table :contacts do |t| t.column :first_name, :string t.column :last_name, :string end end def self.down drop_table :contacts end end --- fixture: contacts.yml renat: id: 1 first_name: Renat last_name: Akhmerov yura: id: 2 first_name: Yury last_name: Kotlyarov --- test: contact_test.rb require File.dirname(__FILE__) + ''/../test_helper'' require ''fileutils'' class ContactTest < Test::Unit::TestCase fixtures :contacts def setup if File.exists?(''index'') FileUtils.rm_rf(''index'') end end def test_new_field Contact.acts_as_ferret :fields => [ :first_name ] assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits assert_equal 1, Contact.find_by_contents(''Y*'').total_hits Contact.aaf_index.close FileUtils.rm_rf(''index'') Contact.acts_as_ferret :fields => [ :first_name, :last_name ] assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits # it fails on the following line!! a bug here? assert_equal 1, Contact.find_by_contents(''K*'').total_hits end end
direct access to the index works - thanks to Thomas Nichols for the idea --- test: contact_test.rb require File.dirname(__FILE__) + ''/../test_helper'' require ''fileutils'' require ''ferret'' class ContactTest < Test::Unit::TestCase fixtures :contacts def setup if File.exists?(''index'') FileUtils.rm_rf(''index'') end end def test_new_field Contact.acts_as_ferret :fields => [ :first_name ] assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits assert_equal 1, Contact.find_by_contents(''Y*'').total_hits Contact.aaf_index.close FileUtils.rm_rf(''index'') Contact.acts_as_ferret :fields => [ :first_name, :last_name ] assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits # it fails on the following line!! a bug here? #assert_equal 1, Contact.find_by_contents(''K*'').total_hits idx = Ferret::Index::Index.new(ath => ''index/test/contact'', :create_if_missing => false) assert_equal 1, idx.search(''last_name:K*'').total_hits assert_equal 1, idx.search(''K*'').total_hits end end Yury Kotlyarov wrote:> send all code we have so far and full test case code. > > --- model: contact.rb > class Contact < ActiveRecord::Base > end > > --- migration: 001_create_contacts_table.rb > class CreateContacts < ActiveRecord::Migration > def self.up > create_table :contacts do |t| > t.column :first_name, :string > t.column :last_name, :string > end > end > > def self.down > drop_table :contacts > end > end > > --- fixture: contacts.yml > renat: > id: 1 > first_name: Renat > last_name: Akhmerov > yura: > id: 2 > first_name: Yury > last_name: Kotlyarov > > --- test: contact_test.rb > > require File.dirname(__FILE__) + ''/../test_helper'' > require ''fileutils'' > > class ContactTest < Test::Unit::TestCase > fixtures :contacts > > def setup > if File.exists?(''index'') > FileUtils.rm_rf(''index'') > end > end > > def test_new_field > Contact.acts_as_ferret :fields => [ :first_name ] > assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits > assert_equal 1, Contact.find_by_contents(''Y*'').total_hits > > Contact.aaf_index.close > FileUtils.rm_rf(''index'') > > Contact.acts_as_ferret :fields => [ :first_name, :last_name ] > > assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits > # it fails on the following line!! a bug here? > assert_equal 1, Contact.find_by_contents(''K*'').total_hits > end > end > > > _______________________________________________ > Ferret-talk mailing list > Ferret-talk at rubyforge.org > http://rubyforge.org/mailman/listinfo/ferret-talk > >-- Best regards, Yury Kotlyarov <;-) BrainHouse web: http://www.brainhouse.ru email: yura at brainhouse.ru skype: yura__115 phone: +7 905 758 1491 jabber: yury.kotlyarov at jabber.ru
Yury Kotlyarov
2007-May-31 22:00 UTC
[Ferret-talk] aaf and dynamic attrs: a bug? WORKAROUND
Got a workaround! Adding following line solves the problem: Contact.aaf_index.ferret_index.options[:default_field] << ''last_name'' So is it a bug in aaf? --- here is full testrequire File.dirname(__FILE__) + ''/../test_helper'' require ''fileutils'' class ContactTest < Test::Unit::TestCase fixtures :contacts def setup if File.exists?(''index'') FileUtils.rm_rf(''index'') end end def test_new_field Contact.acts_as_ferret :fields => [ :first_name ] assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits assert_equal 1, Contact.find_by_contents(''Y*'').total_hits Contact.acts_as_ferret :fields => [ :first_name, :last_name ] Contact.aaf_index.close FileUtils.rm_rf(''index'') Contact.aaf_index.ferret_index.options[:default_field] << ''last_name'' assert_equal 1, Contact.find_by_contents(''K*'').total_hits end end Yury Kotlyarov wrote:> direct access to the index works - thanks to Thomas Nichols for the idea > > --- test: contact_test.rb > require File.dirname(__FILE__) + ''/../test_helper'' > require ''fileutils'' > require ''ferret'' > > class ContactTest < Test::Unit::TestCase > fixtures :contacts > > def setup > if File.exists?(''index'') > FileUtils.rm_rf(''index'') > end > end > > def test_new_field > Contact.acts_as_ferret :fields => [ :first_name ] > assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits > assert_equal 1, Contact.find_by_contents(''Y*'').total_hits > > Contact.aaf_index.close > FileUtils.rm_rf(''index'') > > Contact.acts_as_ferret :fields => [ :first_name, :last_name ] > > assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits > > # it fails on the following line!! a bug here? > #assert_equal 1, Contact.find_by_contents(''K*'').total_hits > > idx = Ferret::Index::Index.new(ath => ''index/test/contact'', > :create_if_missing => false) > assert_equal 1, idx.search(''last_name:K*'').total_hits > assert_equal 1, idx.search(''K*'').total_hits > end > end > > > Yury Kotlyarov wrote: > >> send all code we have so far and full test case code. >> >> --- model: contact.rb >> class Contact < ActiveRecord::Base >> end >> >> --- migration: 001_create_contacts_table.rb >> class CreateContacts < ActiveRecord::Migration >> def self.up >> create_table :contacts do |t| >> t.column :first_name, :string >> t.column :last_name, :string >> end >> end >> >> def self.down >> drop_table :contacts >> end >> end >> >> --- fixture: contacts.yml >> renat: >> id: 1 >> first_name: Renat >> last_name: Akhmerov >> yura: >> id: 2 >> first_name: Yury >> last_name: Kotlyarov >> >> --- test: contact_test.rb >> >> require File.dirname(__FILE__) + ''/../test_helper'' >> require ''fileutils'' >> >> class ContactTest < Test::Unit::TestCase >> fixtures :contacts >> >> def setup >> if File.exists?(''index'') >> FileUtils.rm_rf(''index'') >> end >> end >> >> def test_new_field >> Contact.acts_as_ferret :fields => [ :first_name ] >> assert_equal 1, Contact.find_by_contents(''first_name:Y*'').total_hits >> assert_equal 1, Contact.find_by_contents(''Y*'').total_hits >> >> Contact.aaf_index.close >> FileUtils.rm_rf(''index'') >> >> Contact.acts_as_ferret :fields => [ :first_name, :last_name ] >> >> assert_equal 1, Contact.find_by_contents(''last_name:K*'').total_hits >> # it fails on the following line!! a bug here? >> assert_equal 1, Contact.find_by_contents(''K*'').total_hits >> end >> end >> >> >> _______________________________________________ >> Ferret-talk mailing list >> Ferret-talk at rubyforge.org >> http://rubyforge.org/mailman/listinfo/ferret-talk >> >> >> > > >-- Best regards, Yury Kotlyarov <;-) BrainHouse web: http://www.brainhouse.ru email: yura at brainhouse.ru skype: yura__115 phone: +7 905 758 1491 jabber: yury.kotlyarov at jabber.ru