PostgreSQL
にDjangoに翻訳したいSQLクエリがあります。このSQLクエリを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つのテーブル:ドキュメントとトークンインデックスを持っています。 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]
が、問題は、私はIDのリストを取得するには、データベースに行き、その後、文書を取得するために戻って再びつもりだということです。私は小さなサブセット(max_res
変数で定義され、SQLではLIMIT
で定義されています)
SQLクエリをDjangoに変換するにはどうすればよいですか?これは数百万のドキュメントIDを処理する可能性があるため非効率です。 ?私は、Djangoのクエリは、私はそれだけで例えば100の文書やない1.000.000文書ID、その後、100の文書を返すという意味で、手で書いたもののようになりたい。
回答ありがとうございますが、それは私を助けません。 SQLクエリでは、100個のドキュメントが返されます。私はすべてのIDSが必要な内部クエリを制限することはできませんし、ドキュメントを取得します。 djangoでraw SQLを書くことは可能ですか? – Ali
@Aliなぜ100個のドキュメントしか必要ない場合は、すべてのIDが必要ですか?私はあなたが外側のクエリで追加の注文をしないのを見ているので、ここで(そして内部のものではない)限界点は何ですか?そして外側のクエリに私の答えをスライスしてみてください、私はそれがあなたが必要なものを得るだろうと思う(私はまだ理解していない間になぜ)。 – DrTyrsa
あなたは正しいです、私は100のドキュメントだけが必要なときに、それらのIDをすべて取得する意味がありません。 クイック編集:Djangoによって生成されたクエリを出力するにはどうすればよいですか? – Ali