Как индексировать переводы одного элемента в Sunspot - PullRequest
1 голос
/ 10 февраля 2012

Я использую Sunspot / Solr для индексации моего сайта Rails.Я индексирую название города, выполняя следующие действия:

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

Теперь я интернационализирую весь сайт, используя гем Globalize3.Он сохраняет переводы в другой таблице и выводит эти переводы, используя обычные методы доступа.

Из приведенного здесь примера (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 голосов
/ 21 февраля 2012

Я реализовал языковой индекс в один столбец:

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.

Это позволяет избежать создания столбцов для каждого языка.

Я не уверен, лучше ли это или подход с несколькими столбцами.

...