CINXE.COM
Django ORM vs. Elasticsearch DSL Cheat Sheet - DjangoTricks
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Learn tips and tricks about web development with Django daily" /> <meta name="author" content="Aidas Bendoraitis" /> <meta name="robots" content="index, follow" /> <title>Django ORM vs. Elasticsearch DSL Cheat Sheet - DjangoTricks</title> <link rel="apple-touch-icon-precomposed" sizes="57x57" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-57x57.png" /> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-114x114.png" /> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-72x72.png" /> <link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-144x144.png" /> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-60x60.png" /> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-120x120.png" /> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-76x76.png" /> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/apple-touch-icon-152x152.png" /> <link rel="icon" type="image/png" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/favicon-196x196.png" sizes="196x196" /> <link rel="icon" type="image/png" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/favicon-96x96.png" sizes="96x96" /> <link rel="icon" type="image/png" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="https://www.djangotricks.com/static/20250206011431/site/img/favicon/favicon-128.png" sizes="128x128" /> <meta name="application-name" content=" "/> <meta name="msapplication-TileColor" content="#FFFFFF" /> <meta name="msapplication-TileImage" content="https://www.djangotricks.com/static/20250206011431/site/img/favicon/mstile-144x144.png" /> <meta name="msapplication-square70x70logo" content="https://www.djangotricks.com/static/20250206011431/site/img/favicon/mstile-70x70.png" /> <meta name="msapplication-square150x150logo" content="https://www.djangotricks.com/static/20250206011431/site/img/favicon/mstile-150x150.png" /> <meta name="msapplication-wide310x150logo" content="https://www.djangotricks.com/static/20250206011431/site/img/favicon/mstile-310x150.png" /> <meta name="msapplication-square310x310logo" content="https://www.djangotricks.com/static/20250206011431/site/img/favicon/mstile-310x310.png" /> <!-- Bootstrap core CSS --> <link rel="stylesheet" href="https://www.djangotricks.com/static/20250206011431/site/vendor/bootstrap-4.6.2/css/bootstrap.min.css" /> <!-- Custom fonts for this template --> <link href="https://www.djangotricks.com/static/20250206011431/site/vendor/googlefonts/css/fonts.css" rel="stylesheet" /> <link href="https://www.djangotricks.com/static/20250206011431/site/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" /> <link rel="canonical" href="https://www.djangotricks.com/goodies/tq4NRGdnXkiM/" /> <!-- Custom styles for this template --> <link href="https://www.djangotricks.com/static/20250206011431/gdpr-cookie-consent/css/gdpr-cookie-consent.css" rel="stylesheet" /> <link href="https://www.djangotricks.com/static/20250206011431/site/css/style.css" rel="stylesheet" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://www.djangotricks.com/goodies/tq4NRGdnXkiM/" /> <meta property="og:title" content="Django ORM vs. Elasticsearch DSL Cheat Sheet" /> <meta property="og:description" content="" /> <meta property="og:site_name" content="DjangoTricks" /> <meta property="og:locale" content="en_US" /> <meta property="og:image" content="https://www.djangotricks.com/static/20250206011431/site/img/og.png"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@DjangoTricks"> <meta name="twitter:creator" content="@archatas"> <meta name="twitter:url" content="https://www.djangotricks.com/goodies/tq4NRGdnXkiM/"> <meta name="twitter:title" content="Django ORM vs. Elasticsearch DSL Cheat Sheet"> <meta name="twitter:description" content=""> <meta name="twitter:image" content="https://www.djangotricks.com/static/20250206011431/site/img/og.png"> <meta name="google-site-verification" content="wivh3D0M666toapyJg17LpSiVMCgHNSAsxSkJVVlBjk" /> </head> <body class="bg-light"> <div class="container"> <div class="row"> <div class="col col-fixed"> <nav class="navbar navbar-expand-lg navbar-light bg-light px-0 mx-3"> <a class="navbar-brand" href="/">DjangoTricks</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto d-flex justify-content-around w-75"> <li class="nav-item"> <a class="nav-link" href="/tricks/">Tricks</a> </li> <li class="nav-item"> <a class="nav-link" href="/blog/">Blog</a> </li> <li class="nav-item"> <a class="nav-link active" href="/goodies/">Goodies</a> </li> <li class="nav-item"> <a class="nav-link" href="/social/">Social</a> </li> <li class="nav-item"> <a class="nav-link" href="https://paypal.me/aidasbendoraitis" target="_blank">Donate</a> </li> <li class="nav-item"> <a class="nav-link" href="/cookies/" rel="nofollow">Manage Cookies</a> </li> </ul> <a class="btn btn-primary float-right text-nowrap" href="/random/">Random trick ➔</a> </div> </nav> </div> </div> </div> <div class="alert alert-info text-center" role="alert"> <a href="https://www.pybazaar.com/" target="_blank">Currently I am developing PyBazaar - Python Developer Hub. Be among the first to sign up!</a> </div> <div role="main"> <div class="container"> <div class="row"> <div class="col col-fixed"> <div class="card my-4 p-5 shadow rounded bg-white"> <h1 class="h2 mb-4">Django ORM vs. Elasticsearch DSL Cheat Sheet</h1> <div class="details"><p>This cheat sheet will introduce Django developers to the API of Elasticsearch DSL. Use it for a Django website when you need to search or filter data fast. The cheat sheet compares the syntax of Django QuerySets with the syntax of Elasticsearch DSL.</p> <p>You will get these questions answered:</p> <ul> <li>How to define search queries out of an index document?</li> <li>How to count elements in a search query?</li> <li>How to read through the elements of a search query?</li> <li>How to see what query the domain-specific language will produce?</li> <li>How to filter the index records by a field that contains a value?</li> <li>How to filter the index records by a field that is exactly equal to a value?</li> <li>How to filter by any of the given conditions (OR)?</li> <li>How to filter by all given conditions (AND)?</li> <li>How to filter the index records by values less than or equal to certain value?</li> <li>How to filter by a single value in a nested field?</li> <li>How to filter by one of many values in a related model?</li> <li>How to sort search results by the values of a specific field?</li> <li>How to create queries dynamically?</li> <li>How to paginate the results using Django's default pagination?</li> </ul> <p>And all of that is compressed on a single sheet of paper!</p> <p><strong>Get it now and master your craft like a charm!</strong></p> <p>Current document revision is 05. Last modified in March, 2019. PDF in color. Syntax highlighted.</p></div> <p class="my-4"><button class="btn btn-lg btn-primary btn-block" onclick="location.href='/goodies/tq4NRGdnXkiM/download/';">Download</button></p> <p> <span class="badge badge-pill badge-primary">Programming</span> <span class="badge badge-pill badge-primary">Development</span> <span class="badge badge-pill badge-primary">Cheat Sheet</span> <span class="badge badge-pill badge-secondary">Django 5.x</span> <span class="badge badge-pill badge-secondary">Django 4.2</span> <span class="badge badge-pill badge-secondary">Django 3.2</span> <span class="badge badge-pill badge-secondary">Elasticsearch</span> </p> <p>If you find this goodie useful and would like to support me with coffee, meal, audiobook, or an online course, you can <strong>donate to me at <a href="https://paypal.me/aidasbendoraitis">paypal.me/aidasbendoraitis</a></strong>. </p> <ul class="text-center mt-4 list-unstyled d-flex mx-auto flex-wrap"> <li class="mx-5"><a href="https://x.com/intent/tweet?text=Django%20ORM%20vs.%20Elasticsearch%20DSL%20Cheat%20Sheet%0A%23programming%20%23cheatsheet%20%23development%20%23django-5-x%20%23django-3-2%20%23elasticsearch%20%23django-4-2%0Ahttps%3A//www.djangotricks.com/goodies/tq4NRGdnXkiM/%0A" class="share-on-twitter" target="_blank"><svg width="30" height="30" class="fa fa-twitter-x" version="1.1" viewBox="0 0 855.99 856" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata> <path fill="currentColor" d="m99.801 0c-55.12 0-99.801 44.679-99.801 99.799v656.4c0 55.12 44.681 99.801 99.801 99.801h656.4c55.12 0 99.801-44.68 99.791-99.81v-656.39c0-55.12-44.681-99.799-99.801-99.799zm31.699 149.13h177.32l150.83 201.67 186.67-201.67h52.109l-215.5 232.81 243.02 324.93h-177.32l-163.77-218.98-202.7 218.98h-52.109l231.52-250.11zm76.631 38.391 359.72 480.97h81.461l-359.72-480.97z"/> </svg> <span class="text-white-75">Share<br />on X</span></a></li> <li class="mx-5"><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.djangotricks.com/goodies/tq4NRGdnXkiM/" class="share-on-facebook" target="_blank"><i class="fa fa-facebook-official"></i><span class="text-white-75">Share<br />on Facebook</span></a></li> <li class="mx-5"><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.djangotricks.com/goodies/tq4NRGdnXkiM/" class="share-on-linkedin" target="_blank"><i class="fa fa-linkedin-square"></i><span class="text-white-75">Share<br />on LinkedIn</span></a></li> </ul> </div> <div class="container py-4"> <div class="row"> <div class="col-fixed"> <h3>Also by me</h3> </div> </div> <div class="row mb-3"> <div class="col-fixed position-relative w-100"> <a href="https://websightful.gumroad.com/l/django-paddle-subscriptions" class="card shadow-sm rounded text-white ad" style="background: #000000 url(https://www.djangotricks.com/static/20250206011431/site/img/banners/django-paddle-subscriptions-bg.jpg) left center no-repeat;"> <div class="row no-gutters"> <div class="d-none d-md-block offset-md-5 col-md-2" style="background: linear-gradient(to right bottom, transparent 50%, rgba(0,0,0,0.6) 50%);"> </div> <div class="col-md-5" style="background: rgba(0,0,0,0.6)"> <div class="card-body my-5 mx-0"> <h5 class="h5 card-title">Django Paddle Subscriptions app</h5> <p class="card-text"> For Django-based SaaS projects. </p> </div> </div> </div> </a> <div class="badge badge-dark position-absolute" style="bottom: 0.5em; left: 1.25em;">Django App for You</div> </div> </div> <div class="row mb-3"> <div class="col-fixed position-relative w-100"> <a href="https://websightful.gumroad.com/l/django-gdpr-cookie-consent" class="card shadow-sm rounded text-white ad" style="background: #000000 url(https://www.djangotricks.com/static/20250206011431/site/img/banners/django-gdpr-cookie-consent-bg.jpg) left center no-repeat;"> <div class="row no-gutters"> <div class="d-none d-md-block offset-md-5 col-md-2" style="background: linear-gradient(to right bottom, transparent 50%, rgba(0,0,0,0.6) 50%);"> </div> <div class="col-md-5" style="background: rgba(0,0,0,0.6)"> <div class="card-body my-5 mx-0"> <h5 class="h5 card-title">Django GDPR <span class="text-nowrap">Cookie Consent app</span></h5> <p class="card-text"> For Django websites <span class="text-nowrap">that use cookies</span>. </p> </div> </div> </div> </a> <div class="badge badge-dark position-absolute" style="bottom: 0.5em; left: 1.25em;">Django App for You</div> </div> </div> <div class="row row-eq-height"> <div class="col-fixed"> <div class="row"> <div class="col-md-6 mb-3"> <a href="https://www.amazon.com/Django-Web-Development-Cookbook-development/dp/1838987428/" class="card shadow-sm rounded bg-white text-dark ad h-100"> <div class="row no-gutters h-100"> <div class="col-md-5 my-auto position-relative"> <img src="https://www.djangotricks.com/static/20250206011431/site/img/books/django-3-web-development-cookbook.jpg" class="card-img p-3 mb-3" alt="Django 3 Web Development Cookbook - Fourth Edition" /> <div class="badge badge-light position-absolute" style="bottom: 1em; left: 1.25em">Book for You</div> </div> <div class="col-md-7 my-auto"> <div class="card-body"> <h5 class="h6 card-title">Django 3 Web Development Cookbook</h5> <p class="card-text">Learn how to build practical web projects with Django 3.</p> </div> </div> </div> </a> </div> <div class="col-md-6 mb-3 position-relative"> <a href="https://www.1st-things-1st.com/?ref=djangotricks" class="card shadow-sm rounded bg-white text-dark ad h-100"> <div class="row no-gutters h-100"> <div class="col-md-5 my-auto position-relative"> <img src="https://www.djangotricks.com/static/20250206011431/site/img/banners/1st-things-1st.png" class="card-img p-3 mb-3" alt="1st things 1st" /> <div class="badge badge-light position-absolute" style="bottom: 1em; left: 1.25em;">SaaS for You</div> </div> <div class="col-md-7 my-auto"> <div class="card-body"> <h5 class="h6 card-title">Online prioritizer <span class="text-nowrap">"1st things 1st"</span></h5> <p class="card-text">It's not for everyone, but it might be for you!</p> </div> </div> </div> </a> </div> </div> </div> </div> </div> <div id="comments" class="mx-4"> <div id="disqus_thread"></div> <script nonce="jrmJwML0ewC2zP8EmPOacA=="> var disqus_config = function () { this.page.url = 'https://www.djangotricks.com/goodies/tq4NRGdnXkiM/'; // Your page's canonical URL variable this.page.identifier = 'goodie-tq4NRGdnXkiM'; // Your page's unique identifier variable }; </script> <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> </div> </div> </div> </div> </div> <!-- Bootstrap core JavaScript --> <script src="https://www.djangotricks.com/static/20250206011431/site/vendor/jquery-3.6.1/jquery-3.6.1.min.js"></script> <script src="https://www.djangotricks.com/static/20250206011431/site/vendor/popper-2.11.6/popper.min.js"></script> <script src="https://www.djangotricks.com/static/20250206011431/site/vendor/bootstrap-4.6.2/js/bootstrap.min.js"></script> <script src="https://www.djangotricks.com/static/20250206011431/site/js/main.js" defer></script> <script id="cc_script" data-modal-dialog-url="/cookies/modal-dialog/" src="https://www.djangotricks.com/static/20250206011431/gdpr-cookie-consent/js/gdpr-cookie-consent.min.js" nonce="jrmJwML0ewC2zP8EmPOacA=="></script> </body> </html>