Индексирование вычисляемого поля для условий поиска в Thinking Sphinx - PullRequest
0 голосов
/ 18 июля 2009

У меня настроена модель продуктов, которую я пытаюсь найти с помощью Thinking Sphinx. Модель имеет атрибут с именем status, который может быть активным, неактивным или активным в указанные даты.

Я бы хотел ограничить результаты поиска только активными продуктами. То есть имеет статус активного или имеет статус активного в течение дат, и текущее время находится между этими датами.

Я новичок в Rails, поэтому я ищу предложения о том, как мне это реализовать. Я думал о том, чтобы добавить в мою модель логический метод, который вычисляет эту логику, но я не думаю, что это индексируется Sphinx.

Я использую MySQL в качестве сервера базы данных.

У кого-нибудь есть какие-нибудь яркие идеи?

Ответы [ 2 ]

4 голосов
/ 18 июля 2009

Вы правы, методы ruby ​​на вашей модели недоступны для sphinx. Однако вы можете заново создать метод как атрибут sphinx. Это легко сделать с помощью фрагментов SQL, например:

class Person < ActiveRecord::base
  ...


  define_index do
    has "status = 'active' and now() > start_date and now() < end_date", :as => :active, :type => :boolean
  end

  ...
end

Использование строки для указания поля или атрибута, подобного этому, аналогично указанию настраиваемого столбца при создании запроса SQL.

0 голосов
/ 19 июля 2009
...