我使用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
的文字?
那么,为同一项目名称的多个翻译编制索引的更好方法是什么?
答案 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的一部分。
这可以避免为每种语言创建列。
我不确定这是更好还是多列方法。