Laurent
Laurent

Reputation: 1584

Sphinx and friend search

I have a high-level question about Sphinx on Ruby on Rails:

Say I want to search are the articles written by my friends. The model structure would be:

User has_many users :through relationships
Article belongs_to User

My question is: what sort of syntax would I use on Sphinx so the user searches for articles and gets only the articles written by his friends? I am having trouble finding this online and I'd like to have a handle on how this would work before I implement my solution.

NOTE: I suspect one solution is to have an array of friend IDs and then use a :condition :with => {:id => array_of_friendIDs}. But maybe there is a more effective way of doing it?

Upvotes: 1

Views: 104

Answers (1)

MrTheWalrus
MrTheWalrus

Reputation: 9700

You're basically correct - you're going to need to assemble an array of friend ids and pass it to the search, using the :with option. How you fetch that list isn't particularly related to Sphinx, though.

friend_ids = current_user.users.pluck(:id)

@articles = Article.search(params['search_term'], :with => {:user_id => friend_ids})

Using .pluck will save you a good bit of time that would otherwise be devoted to instantiating a bunch of User objects - you only need their ids. Make sure that you've set user_id as an attribute for Sphinx (using has user_id in the define_index block).

Upvotes: 1

Related Questions