Forum: Ferret acts_as_ferret derived fields and custom analyzer

Posted by Vivek Vaidya (vsvaidya)
on 2009-08-17 03:53
Hello!

I am using the following Analyzer:

require 'rubygems'
require 'ferret'
module Ferret
  module Analysis
    class StemmingAnalyzer < Analyzer

      def initialize(stop_words = FULL_ENGLISH_STOP_WORDS, lower = true)
            @lower = lower
            @stop_words = stop_words
      end

      def token_stream(field, text)
        ts = StandardTokenizer.new(text)
        ts = LowerCaseFilter.new(ts) if @lower
        ts = StopFilter.new(ts, @stop_words)
        ts = HyphenFilter.new(ts)
        StemFilter.new(ts)
      end
    end
  end
end

And my model looks like:

class Product < ActiveRecord::Base
  include UUIDHelper

  acts_as_ferret(:fields => [ :name, :description, :category_name],
                 :remote => true,
                 :ferret => { :analyzer =>
Ferret::Analysis::StemmingAnalyzer.new },
                 :store_class_name => true)

  validates_presence_of :name, :upc, :ucc_12
  validates_presence_of :category_id, :manufacturer_id, :brand_id

  validates_length_of :name, :maximum => 50,
                      :message => 'is too long.  Maximum length is 50
characters.'

  validates_length_of :description, :maximum => 255,
                      :message => 'is too long.  Maximum length is 255
characters.'

  belongs_to :category

  def category_name
    return self.category.name
  end

  def self.per_page
    20
  end
end

My problem is that the custom analyzer does not seem to be getting
applied to the "category_name" derived field.

Has anyone else had this problem?

Thank you,
Vivek
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.