如何索引太阳黑子中一个项目的翻译

时间:2012-02-10 08:27:22

标签: ruby-on-rails internationalization solr sunspot

我使用Sunspot / Solr索引我的Rails网站。我通过执行以下操作来索引城市名称:

class City < ActiveRecord::Base
  searchable do
    text :name
    ...
  end
  ...

现在我正在使用Globalize3 gem对整个网站进行国际化。它将翻译保存在另一个表中,并使用普通访问器获取这些翻译。

从这里的例子(http://osdir.com/ml/rails-oceania/2011-11/msg00047.html),他们有:

searchable do
  # sorting
  string(:job_title) { title }

  # keyword / fulltext searching
  I18n.available_locales.each do |locale|
    text(("title_" + locale.to_s).to_sym, :default_boost => 2)
      { eval("title_" + locale.to_s) }
  end
end

因此,对于每个语言环境,在Sunspot中都有一个索引列,如title_en和title_fr。我想知道是否有更好的方法? (太多列对我来说听起来不好)

我想的另一种选择是将一个项目的翻译作为单个字符串连接起来并将其放在另一个文本索引列中。

此外,我在想是否有类似integer :ids, :multiple => true的文字?

那么,为同一项目名称的多个翻译编制索引的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

我实现了单列语言索引:

LANGUAGES = {
  'en' => 'English',
  'fr' => 'Français'
}

#inside city model

text :name_alt do
  LANGUAGES.keys.reject{|l| l=='en'}.map do |locale|
    read_attribute(:name, locale:locale)
  end
end

这使用Rails I18n模块和Globalize3。 'read_attribute'是Globalize3的一部分。

这可以避免为每种语言创建列。

我不确定这是更好还是多列方法。