2013-10-03 1 views
0

Категория has_many продукты.Условия поиска для ассоциации

В category_index я определил:
indexes :title
has products(:id), :as => :product_ids

В product_index я определил:
indexes :title

В поисковика классе:

product_ids = Product.search_for_ids('word', with: {user_id: 5}) 
categories = Category.search('word') 
categories_where_products_match = Category.search(with: {product_ids: products_ids}) 

Как я могу объединить categories и categories_where_products_match в один объект ThinkingSphinx::Search?

+0

у вас есть хэш назад, когда вы проводите поиск? – MZaragoza

+0

Я получаю «ThinkingSphinx :: Search» в результате метода поиска. – fantgeass

ответ

1

Для того, что вы пытаетесь сделать здесь, это будет работать только при поиске на Продукте. У вашего индекса категории может быть много наименований продуктов и множество идентификаторов пользователей продукта, но нет понятия хэшей или словарей, поэтому Sphinx не сможет связать два отдельных коллекций вместе.

индекс, как это следует сделать трюк:

ThinkingSphinx::Index.define :product, with: :active_record do 
    indexes title 
    has user_id 
end 

А потом искали:

Product.search 'word', with: {user_id: 5} 

Если вы хотите, чтобы получить те категории, которые соответствуют этому, то я бы рекомендовал добавить следующее атрибут вашего определения индекса категории:

has products.id, as: :product_ids 

И затем при поиске:

product_ids = Product.search_for_ids 'word', with: {user_id: 5} 
categories = Category.search with: {product_ids: product_ids} 
+0

Что делать, если поля других категорий соответствуют условию поиска, и они мне тоже нужны? Я не хочу фильтровать результаты, используя «с». – fantgeass

+0

Я не понимаю - вы хотели включать только результаты с продуктами для определенного пользователя? – pat

+0

Я отредактировал вопрос. Просто сказал, что я хочу, чтобы категории соответствовали «слову», а не только категориям с продуктами. – fantgeass