No worries, I've been in those situations myself.
I think the issue is that you're using filters/conditions and order
statements incorrectly. Thinking Sphinx isn't quite as clever as
Active Record for conditions - due to the limitations of Sphinx - so
you'll want to do something more like:
conditions = {
:user_id => user_id
}
# chronic stuff
Upload.search(filter_text,
:with => conditions,
:without => {:creator_id => user_id},
:page => page,
:per_page => per_page,
:order => "created_at ASC, id ASC"
)
This is assuming you want to only return uploads which weren't created
by the user (the :without option).
Cheers
--
Pat
On 12/02/2009, at 5:59 PM, brian wrote:
>
> Pat,
>
> Sorry I was confused - its not returning an empty array - that was
> from before. Its returning all the records, even if a user has no
> subscriptions, its still returns all the matches for the descriptions
> regardless of the user_id.
>
> Sorry for the confusion - I've tried so many combinations :)
>
> B
>
> On Feb 12, 1:39 am, brian <[email protected]> wrote:
>> def self.filter_streams(user_id, filter_text=nil, page=1,
>> per_page=UPLOADS_RESULTS_PER_PAGE)
>>
>> conditions = {
>> :user_id => user_id,
>> :creator_id => "creator_id <> #{user_id}"
>> }
>>
>> date = Chronic.parse(filter_text)
>> unless date.nil?
>> conditions[:created_at] =
>> date.beginning_of_day.to_i..date.end_of_day.to_i
>> filter_text = nil
>> end
>>
>> Upload.search(filter_text, :conditions => conditions,
>> :page => page, :per_page => per_page, :order =>
>> [:created_at, :id])
>> end
>>
>> I've tried different combinations of have user_id or the date or
>> both,
>> but I get nothing back unless I use only the filter_text for the
>> description.
>>
>> Chronic is a date parser that returns nil if it doesn't recognize the
>> date. So it will search or for date or for the text if it doesn't.
>>
>> B
>>
>> On Feb 12, 12:26 am, Pat Allan <[email protected]> wrote:
>>
>>> How are you querying against user_id and/or creator_id?
>>
>>> Cheers
>>
>>> --
>>> Pat
>>
>>> On 12/02/2009, at 4:25 PM, brian wrote:
>>
>>>> Hi Pat,
>>
>>>> Thanks for looking at this. Its my first time using sphinx, but
>>>> I've
>>>> found it pretty good so far. I'm using other indexes in my app
>>>> without any trouble.
>>
>>>> Its returning the correct records. It works with description, but
>>>> when I add the :creator_id, I get an empty array back. I want to
>>>> search within uploads for entities that I'm subscribed to.
>>
>>>> Thanks,
>>>> Brian
>>
>>>> On Feb 11, 9:01 pm, Pat Allan <[email protected]> wrote:
>>>>> Hi Brian
>>
>>>>> Do you get the expected data in the user_id column if you run that
>>>>> SQL
>>>>> query (stripping out the id filtering in the WHERE clause, of
>>>>> course)?
>>
>>>>> --
>>>>> Pat
>>
>>>>> On 12/02/2009, at 1:31 AM, brian wrote:
>>
>>>>>> Here is the sql that I have:
>>
>>>>>> SELECT `uploads`.`id` * 3 + 1 AS `id` ,
>>>>>> CAST(`uploads`.`description`
>>>>>> AS CHAR) AS `description`,
>>>>>> UNIX_TIMESTAMP(`uploads`.`created_at`) AS
>>>>>> `created_at`, `uploads`.`creator_id` AS `creator_id`,
>>>>>> GROUP_CONCAT
>>>>>> (`subscriptions`.`user_id` SEPARATOR ',') AS `user_id`,
>>>>>> `uploads`.`id`
>>>>>> AS `sphinx_internal_id`, 269607721 AS `class_crc`, '269607721' AS
>>>>>> `subclass_crcs`, 0 AS `sphinx_deleted`
>>
>>>>>> FROM uploads
>>>>>> LEFT OUTER JOIN `entities` ON `entities`.id = `uploads`.entity_id
>>>>>> LEFT OUTER JOIN `subscriptions` ON subscriptions.entity_id =
>>>>>> entities.id
>>
>>>>>> WHERE `uploads`.`id` >= $start AND `uploads`.`id` <= $end
>>>>>> AND
>>>>>> `uploads`.`delta` = 0 GROUP BY `uploads`.`id`
>>
>>>>>> ORDER BY NULL
>>
>>>>>> On Feb 10, 11:45 pm, Pat Allan <[email protected]> wrote:
>>>>>>> Hi Brian
>>
>>>>>>> From an initial look, it seems like you're doing the right
>>>>>>> thing -
>>>>>>> although entity.subscriptions(:user_id) could be done as
>>>>>>> entity.subscriptions.user_id.
>>
>>>>>>> What's the sql_query in your development.sphinx.conf file for
>>>>>>> the
>>>>>>> Upload index?
>>
>>>>>>> --
>>>>>>> Pat
>>
>>>>>>> On 11/02/2009, at 5:27 AM, brian wrote:
>>
>>>>>>>> I'm trying to get associations working, but can't seem to get
>>>>>>>> it
>>>>>>>> right. I have users, who can subscribe to entities. Entities
>>>>>>>> have
>>>>>>>> uploads and uploads have descriptions. I want to search
>>>>>>>> upload.description through all of a user's subscription.
>>
>>>>>>>> Here are my models:
>>
>>>>>>>> class User < ActiveRecord::Base
>>>>>>>> has_many :subscriptions
>>>>>>>> has_many :entity_subscriptions, :through
>>>>>>>> => :subscriptions, :source
>>>>>>>> => 'entity'
>>>>>>>> has_many :entities, :foreign_key => 'owner_id'
>>>>>>>> ...
>>>>>>>> end
>>
>>>>>>>> class Entity < ActiveRecord::Base
>>>>>>>> has_many :uploads
>>>>>>>> has_many :subscriptions
>>>>>>>> has_many :subscribers, :through => :subscriptions, :source =>
>>>>>>>> 'user'
>>>>>>>> ...
>>>>>>>> end
>>
>>>>>>>> class Subscription < ActiveRecord::Base
>>>>>>>> belongs_to :entity
>>>>>>>> belongs_to :user
>>>>>>>> end
>>
>>>>>>>> class Upload < ActiveRecord::Base
>>>>>>>> belongs_to :entity
>>
>>>>>>>> define_index do
>>>>>>>> indexes description
>>>>>>>> has :created_at
>>>>>>>> has :creator_id
>>>>>>>> has entity.subscriptions(:user_id), :as => :user_id
>>>>>>>> set_property :delta => true
>>>>>>>> end
>>>>>>>> ...
>>>>>>>> end
>>
>>>>>>>> If I add in user id, i don't get subscriptions for the user
>>>>>>>> that I
>>>>>>>> want. I think I've just set it up wrong, any help is greatly
>>>>>>>> apprieciated.
>>
>>>>>>>> Thanks,
>>>>>>>> Brian
>>
>>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---