You’ll end up with two requests, but it shouldn’t be a request-per-object, from 
what I understand, so that’s not too bad from a scaling perspective.

> On 30 Jan 2015, at 12:40 am, Misha Slyusarev <[email protected]> wrote:
> 
> That's exactly what I use :)
> 
> So my guess was correct? And you think this will not doubling (overheading) 
> DB requests?
> 
> Thanks!
> 
> On Thursday, 29 January 2015 10:19:51 UTC-3, Pat Allan wrote:
> You can use search_for_ids instead of search - that’ll avoid instantiating 
> all of your Item objects via TS :)
> 
>> On 29 Jan 2015, at 11:44 pm, Misha Slyusarev <[email protected] 
>> <javascript:>> wrote:
>> 
>> Great thinking! That's probably what I can do if my idea won't work.
>> 
>> So yesterday I decided stop requesting TS for all records, but instead get 
>> all item IDs (using  per_page: 1000) and then do another request to the DB 
>> with left join and all required sorting. So this works. And according to 
>> documentation a thousand of records is the maximum TS will return anyway. 
>> What I'm concerning about is obviously performance.
>> 
>> So my guess is that TS will anyway do the same thing, that is, it will 
>> firstly find all the IDs and secondly look for real data in the DB. Is it 
>> true? And what do you think generally about this approach?
>> 
>> Thanks!
>> Misha
>> 
>> On Wednesday, 28 January 2015 19:43:02 UTC-3, Pat Allan wrote:
>> I’ve had to do something like this for clients in the past… but it’s never 
>> particularly neat.
>> 
>> What you can do is add an attribute to your Item index indicating how many 
>> variations it has:
>> 
>>     join item_variations # if you’re not using the association already in 
>> the index
>>     has “COUNT(item_variations.id <http://item_variations.id/>)”, :as => 
>> :variations_count, :type => :integer
>> 
>> Also, add an attribute of the same name to your ItemVariation index:
>> 
>>     has “0”, :as => :variations_count, :type => :integer
>> 
>> And then, search across both models, but filter out items which have 
>> variations:
>> 
>>     ThinkingSphinx.search params[:q],
>>       :models => [Item, ItemVariation],
>>       :with => {:variations_count => 0}
>> 
>> Of course, then you’re getting a mixture of records back from Sphinx, so 
>> your views/controllers will need to manage that situation accordingly.
>> 
>> — 
>> Pat
>> 
>>> On 29 Jan 2015, at 1:38 am, Misha Slyusarev <mik3w...@ <>gmail.com 
>>> <http://gmail.com/>> wrote:
>>> 
>>> Yeah, I thought about that. The problem is that not all items have 
>>> variations. :( :( :(
>>> 
>>> Also I came up with join instruction for index which give me actually what 
>>> I wanted -- left join on item_variations. But I can't figure out how to 
>>> - select fields that connected to the variation, like 
>>> items_found[0].variaiton_id
>>> - make TS not add GROUP by item ID, so I could have a few records with the 
>>> same item ID but different variations IDs.
>>> 
>>> Any thoughts I can do it somehow?
>>> 
>>> Thanks!
>>> 
>>> On Wednesday, 28 January 2015 10:23:16 UTC-3, Pat Allan wrote:
>>> Hi Misha
>>> 
>>> In this case I think you want to be searching on ItemVariation instead of 
>>> Item - you’re asking Sphinx to return an Item more than once, and it 
>>> doesn’t have the ability to do that. Having an index on ItemVariation 
>>> (pulling in Item details in fields and attributes as needed) is almost 
>>> certainly going to be a better fit.
>>> 
>>> Cheers
>>> 
>>> — 
>>> Pat
>>> 
>>>> On 28 Jan 2015, at 3:03 am, Misha Slyusarev <mik3w...@ <>gmail.com 
>>>> <http://gmail.com/>> wrote:
>>>> 
>>>> Hi Pat!
>>>> Thank you for all your help so far! The problem is still actual though.
>>>> 
>>>> So basically what I want to get is an array where each of the elements 
>>>> includes information from both Item and ItemVariation models (Item 
>>>> has_many ItemVariations). Generally I can achieve this in ActiveRecord 
>>>> using left join, but in ThinkingSphinx when I try to use same technic (as 
>>>> shown bellow with joins: 'left join..') I fail since I get only first 
>>>> variation (first element of the joined table) along with Item.
>>>> 
>>>> The idea behind that is to display variations alongside with items on the 
>>>> list. And to be able to treat them independently.
>>>> 
>>>> Here is the query
>>>> items_found = Item.search params[:q], 
>>>>     :joins => 'left join item_variations iv on iv.item_id=items.id 
>>>> <http://items.id/>',
>>>>     :select => 'items.*, iv.id <http://iv.id/> as variation_id'
>>>> 
>>>> So bellow is what I'm getting
>>>> items_found[0]:
>>>>   id: 1
>>>>   variation_id: 3434
>>>> 
>>>> items_found[1]:
>>>>   id: 2
>>>>   variation_id: nil
>>>> 
>>>> And here is what I want to get (here Item 1 goes with two variations and 
>>>> they come as standalone elements of the array, and both have same item's 
>>>> information, but different item variation's information)
>>>> 
>>>> items_found[0]:
>>>>   id: 1
>>>>   variation_id: 3434
>>>> 
>>>> items_found[1]:
>>>>   id: 1
>>>>   variation_id: 9898
>>>> 
>>>> items_found[2]:
>>>>   id: 2
>>>>   variation_id: nil
>>>> 
>>>> Please keep in mind that I use TS v2.0.10
>>>> 
>>>> Appreciate any advise or thoughts!
>>>> Misha
>>>> 
>>>> On Monday, 10 November 2014 08:05:26 UTC-3, Pat Allan wrote:
>>>> Hi Misha
>>>> 
>>>> Sphinx always paginates - there’s no way to turn that off. You can request 
>>>> really large pages though (the default maximum is 1000 records, but that 
>>>> can be modified):
>>>> http://pat.github.io/thinking-sphinx/advanced_config.html#large-result-sets
>>>>  
>>>> <http://pat.github.io/thinking-sphinx/advanced_config.html#large-result-sets>
>>>> 
>>>> I’m not sure I quite understand what you’re after, though… if you want the 
>>>> item_variations loaded from the database alongside each item (eager 
>>>> loading), then you can pass through either :joins or :include options 
>>>> nested within the :sql option. Same goes for :select.
>>>> http://pat.github.io/thinking-sphinx/searching.html#advanced 
>>>> <http://pat.github.io/thinking-sphinx/searching.html#advanced>
>>>> 
>>>> It’s worth noting, though, that Sphinx itself has no concept of joins - 
>>>> there’s no way to tie one index to another.
>>>> 
>>>> Does that help? Have I missed something?
>>>> 
>>>> — 
>>>> Pat
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Thinking Sphinx" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to thinking-sphi...@ <>googlegroups. <http://googlegroups.com/>com 
>>>> <http://googlegroups.com/>.
>>>> To post to this group, send email to thinkin...@ <>googlegroups.com 
>>>> <http://googlegroups.com/>.
>>>> Visit this group at http://groups.google.com/group/thinking-sphinx 
>>>> <http://groups.google.com/group/thinking-sphinx>.
>>>> For more options, visit https://groups.google.com/d/optout 
>>>> <https://groups.google.com/d/optout>.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Thinking Sphinx" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to thinking-sphi...@ <>googlegroups.com <http://googlegroups.com/>.
>>> To post to this group, send email to thinkin...@ <>googlegroups. 
>>> <http://googlegroups.com/>com <http://googlegroups.com/>.
>>> Visit this group at http://groups.google.com/group/thinking-sphinx 
>>> <http://groups.google.com/group/thinking-sphinx>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Thinking Sphinx" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/thinking-sphinx 
>> <http://groups.google.com/group/thinking-sphinx>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Thinking Sphinx" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/thinking-sphinx 
> <http://groups.google.com/group/thinking-sphinx>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/thinking-sphinx.
For more options, visit https://groups.google.com/d/optout.

Reply via email to