У меня есть запрос SQL в PostgreSQL
, который я хотел бы перевести на Django.
select * from main_document
where id in (
select distinct on (document_id) document_id
from main_tokenindex
where token in('token1', 'token2')
order by document_id, relevance desc
) LIMIT 100
У меня есть 2 таблицы: Document и TokenIndex.Отношение 1 ко многим, токен может быть во многих документах.
Пока у меня есть это:
terms = []
ids = [doc.document_id for doc in TokenIndex.objects.filter(token__in = terms).
distinct('document__id').order_by("-relevance")]
list(Document.objects.filter(pk__in=ids))[:max_res]
Как видите, проблема в том, что я иду в базу данныхчтобы получить список идентификаторов, а затем вернуться обратно, чтобы получить документы.Это неэффективно, потому что я могу иметь дело с миллионами идентификаторов документов, в то время как меня интересует только небольшое подмножество (определенное переменной max_res
и LIMIT
в SQL.
Как мнеперевести запрос SQL в Django? Я хочу, чтобы запрос Django был похож на тот, который я написал вручную, в том смысле, что он возвращает только 100 документов, например, а не 1.000.000 идентификаторов документов, а затем 100 документов.