On Mon, Jul 11, 2011 at 3:04 PM, Cal Leeming [Simplicity Media Ltd] <
cal.leem...@simplicitymedialtd.co.uk> wrote:

>
>
> On Mon, Jul 11, 2011 at 2:57 PM, Michel30 <forerunn...@gmail.com> wrote:
>
>> Hi all,
>>
>> I have a basic search function that uses Q objects.
>> After profiling it I found that the actual (mysql) database query
>> finishes in fractions of seconds but the iterating after this can take
>> up to 50 seconds per 10.000 results.
>>
>> I have been trying to speed it up but I have had not much results..
>>
>> My query is this one:
>>
>>       found_entries = model.objects.filter((Q-objects),
>> obsolete=0).order_by('-version','docid')
>>
>> So far so good, but then I need a dictionary to retrieve only unique
>> 'documentid's'.
>>
>
> You could do:
>
> # grab all results
> _res =
> model.objects.filter((Q-objects),obsolete=0).order_by('-version','docid').values()
> # re-map them into (id, obj)
> _res = map(lambda x: [x.docid, x], _res)
> # wrap in a dict(), which uses index position 0 as the key, and index
> position 1 as the value
> _res = dict(_res)
>

Just tested the same principle, and it seems to work fine. It uses last
object found as the final choice if dups are found.

>>> _res = [ [1,2], [1,3], [2,4], [2,5] ]
>>> map(lambda x: [x[0], x[1]], _res)
[[1, 2], [1, 3], [2, 4], [2, 5]]
>>> map(lambda x: [x[0], x[1]], _res)
[[1, 2], [1, 3], [2, 4], [2, 5]]
>>> dict(map(lambda x: [x[0], x[1]], _res))
{1: 3, 2: 5}
>>>




>
> Let me know if this give you the results you need.
>
>
>>    rev_dict = {}
>>
>> This is the part that hurts:
>>
>>    for d in found_entries:
>>        rev_dict[d.documentid] = d
>>
>> And then some more sorting and filtering:
>>
>>    filtered_entries = rev_dict.values()
>>    filtered_entries.sort(key=lambda d: d.revisiondate, reverse=True)
>>
>> Does anyone have some better ideas to achieve this?
>>
>> Thanks
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To post to this group, send email to django-users@googlegroups.com.
>> To unsubscribe from this group, send email to
>> django-users+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/django-users?hl=en.
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to