📖 Scenario: You have a collection of documents representing books in a library. Some books have a publisher field, but others do not. You want to find all books that have a publisher field set.
🎯 Goal: Build an Elasticsearch query using the exists query to find all documents where the publisher field exists.
📋 What You'll Learn
Create an index mapping with fields title and publisher
Add sample documents with and without the publisher field
Write an exists query to find documents where publisher exists
Print the query JSON to verify correctness
💡 Why This Matters
🌍 Real World
Exists queries help find documents that have certain information filled in, like finding all books that have a publisher listed.
💼 Career
Knowing how to write exists queries is useful for data filtering and search tasks in roles like data analyst, backend developer, or search engineer.
Progress0 / 4 steps
1
Create sample documents
Create a variable called documents that contains a list of three dictionaries representing books. The first book has title "Book A" and publisher "Pub1". The second book has title "Book B" without a publisher. The third book has title "Book C" and publisher "Pub3".
Elasticsearch
Hint
Use a list of dictionaries. Some dictionaries have the publisher key, some do not.
2
Create the exists query
Create a variable called exists_query that contains a dictionary representing an Elasticsearch exists query checking for the field publisher.
Elasticsearch
Hint
The exists query uses a dictionary with key field set to the field name.
3
Combine documents and query in a search body
Create a variable called search_body that contains a dictionary with the key query set to the exists_query value inside it.
Elasticsearch
Hint
Use the query key and assign it the value inside exists_query["query"].
4
Print the search query JSON
Write a print statement to display the search_body variable.
Elasticsearch
Hint
Use print(search_body) to display the query dictionary.
Practice
(1/5)
1. What does the exists query do in Elasticsearch?
easy
A. Finds documents where a specific field is present
B. Finds documents where a field has a specific value
C. Deletes documents missing a field
D. Updates documents with a missing field
Solution
Step 1: Understand the purpose of the exists query
The exists query checks if a field exists in documents, filtering those that have the field.
Step 2: Compare options with the query's function
Only Finds documents where a specific field is present correctly describes this behavior; others describe different operations.
Final Answer:
Finds documents where a specific field is present -> Option A
Quick Check:
Exists query = finds documents with field [OK]
Hint: Exists query checks if a field is present in documents [OK]
Common Mistakes:
Confusing exists query with term query
Thinking it deletes or updates documents
Assuming it checks field values
2. Which of the following is the correct syntax for an exists query in Elasticsearch?
easy
A. {"query": {"exists": {"field_name": "user"}}}
B. {"query": {"exists": "user"}}
C. {"query": {"exists": {"value": "user"}}}
D. {"query": {"exists": {"field": "user"}}}
Solution
Step 1: Recall the correct JSON structure for exists query
The exists query requires a "field" key inside its object specifying the field name.
Step 2: Match options to correct syntax
{"query": {"exists": {"field": "user"}}} matches the correct syntax: {"exists": {"field": "user"}}. Others use wrong keys or structure.
Final Answer:
{"query": {"exists": {"field": "user"}}} -> Option D
Quick Check:
Exists query syntax uses "field" key [OK]
Hint: Exists query needs "field" key inside its object [OK]
Common Mistakes:
Using "value" or "field_name" instead of "field"
Omitting the object braces around field
Passing field as a string directly
3. Given the following Elasticsearch query, what documents will it return?
{"query": {"exists": {"field": "email"}}}
medium
A. Documents where the email field exists
B. Documents where the email field is missing
C. Documents where the email field is empty
D. All documents regardless of email field
Solution
Step 1: Analyze the query structure
The query uses an exists query on the field "email", which filters documents having that field.
Step 2: Understand what exists means for documents
Documents returned must have the "email" field present, regardless of its value.
Final Answer:
Documents where the email field exists -> Option A
Quick Check:
Exists query returns docs with field present [OK]
Hint: Exists query returns docs with the field present only [OK]
Common Mistakes:
Thinking it returns docs missing the field
Assuming empty fields are excluded
Believing it returns all documents
4. Identify the error in this Elasticsearch exists query:
{"query": {"exists": {"field_name": "status"}}}
medium
A. The field value should be an array, not a string
B. The query should use "match" instead of "exists"
C. The key should be "field", not "field_name"
D. The query is missing a "filter" wrapper
Solution
Step 1: Check the key used inside exists query
The exists query requires the key "field" to specify the field name.
Step 2: Compare the given key with the correct one
The query uses "field_name" which is incorrect and causes an error.
Final Answer:
The key should be "field", not "field_name" -> Option C
Quick Check:
Exists query key = "field" [OK]
Hint: Use "field" key inside exists query, not "field_name" [OK]
Common Mistakes:
Using incorrect key names inside exists query
Confusing exists with match query
Adding unnecessary wrappers
5. You want to find all documents where the field phone exists but is not empty or null. Which Elasticsearch query best achieves this?
hard
A. {"query": {"bool": {"must": [{"exists": {"field": "phone"}}, {"term": {"phone": ""}}]}}}
D. {"query": {"exists": {"field": "phone"}, "term": {"phone": ""}}}
Solution
Step 1: Understand the requirement
We want documents where "phone" exists and is not empty or null.
Step 2: Evaluate each option
{"query": {"exists": {"field": "phone"}}} only checks existence, not emptiness. {"query": {"bool": {"must": [{"exists": {"field": "phone"}}, {"term": {"phone": ""}}]}}} incorrectly requires phone to be empty. {"query": {"exists": {"field": "phone"}, "term": {"phone": ""}}} has invalid syntax combining exists and term at same level. {"query": {"bool": {"must": [{"exists": {"field": "phone"}}, {"script": {"script": "doc['phone'].value != ''"}}]}}} uses a bool must with exists and a script checking phone is not empty, correctly filtering as needed.