2013-07-26 3 views
0

У меня есть модель 'ModelA' с отношением has_many к 'ModelB'.Фильтровать индексный столбец на основе фильтра атрибутов

ModelB имеет описание: текстовая колонка и день: межсетевой столбец (0-6 для будних дней).

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

Отрывок из индексного блока в Modela:

indexes model_bs.description, as: :model_b_description 
has model_bs.day, as: :model_b_day 
set_property field_weights: { 
    model_b_description: 10 
} 

Я хотел бы сделать ModelA.search('some description') но фильтровать возвращаемые результаты, используя model_b_day, обеспечивая описание, которое я ищу на определенный день (позволяет сказать :model_b_day => 5).

Я могу выполнить поиск с использованием with: { day: 5 }, но это вернет ModelB, которые соответствуют столбцу дня, а не соответствует ли описание поиску И в этот день.

Любая помощь была бы принята с благодарностью!

EDIT: Я хотел бы отметить, я использую мышление Sphinx v2.0.13

ответ

1

Sphinx не имеет понятия пар ключ/значение (хэши, словари, все, что вы хотели бы называть их), поэтому он не знает, что описание привязано к дню в вашем индексе ModelA - он просто содержит кучу описаний, объединенных в одну строку, и кучу дней в виде массива целых чисел для каждой записи ModelA.

Лучшее решение в этом случае заключается в поиске на ModelB вместо:

define_index do 
    indexes description 
    has day 
    set_property field_weights: {description: 10} 
end 

Таким образом, есть это связь между полем и атрибутом (как это единственное значение каждого для каждой записи). Вы также можете получить данные ModelA через ассоциацию (я предполагаю, что в ModelB есть соответствующий belongs_to :model_a).

+0

Кажется, что поиск по-прежнему возвращает ModelB до тех пор, пока ModelB имеет описание в определенный день, а не имеет ли оно описание, соответствующее поиску в этот день. – fridgerator

+0

нет, вы абсолютно правы, спасибо! – fridgerator

Смежные вопросы