Bird
Raised Fist0
Elasticsearchquery~30 mins

Percolate queries (reverse search) in Elasticsearch - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Percolate Queries (Reverse Search) with Elasticsearch
📖 Scenario: You work at a news agency. You want to save some search queries so that when new articles arrive, you can quickly find which saved queries match the new articles. This helps you notify readers about news they care about.
🎯 Goal: You will create a percolator index, add saved queries, add a new article, and then find which saved queries match the new article using Elasticsearch percolate queries.
📋 What You'll Learn
Create an Elasticsearch index with a percolator field called query
Index saved queries using the query field
Index a new document (article) to test against saved queries
Use a percolate query to find which saved queries match the new article
💡 Why This Matters
🌍 Real World
News agencies, alert systems, and recommendation engines use percolate queries to quickly find saved searches that match new incoming data.
💼 Career
Understanding percolate queries is useful for roles involving Elasticsearch, search engineering, and real-time alerting systems.
Progress0 / 4 steps
1
Create the percolator index with mapping
Create an Elasticsearch index called news_queries with a mapping that has a query field of type percolator and a content field of type text.
Elasticsearch
Hint

Use the PUT method to create an index with a mapping. The query field must be of type percolator.

2
Index saved queries using the percolator field
Index two saved queries into the news_queries index. Use document IDs 1 and 2. The first query should match documents containing the word sports in content. The second query should match documents containing the word politics in content. Store these queries in the query field.
Elasticsearch
Hint

Use PUT /news_queries/_doc/1 and PUT /news_queries/_doc/2 to index the saved queries. The queries go inside the query field.

3
Index a new article document
Index a new document into an index called news_articles with ID 1. The document should have a content field with the text: Latest sports update from the championship.
Elasticsearch
Hint

Create a new index news_articles and add a document with the given content.

4
Use percolate query to find matching saved queries
Run a search on the news_queries index using a percolate query. The query should check which saved queries match the document with content: Latest sports update from the championship. Print the IDs of matching saved queries.
Elasticsearch
Hint

Use a percolate query in the search body on news_queries to find matching saved queries.

Practice

(1/5)
1.

What is the main purpose of a percolate query in Elasticsearch?

easy
A. To find stored queries that match a new document
B. To update documents in an index
C. To delete documents based on a condition
D. To aggregate data by terms

Solution

  1. Step 1: Understand percolate query concept

    A percolate query is used to find stored queries that match a new document, reversing the usual search direction.
  2. Step 2: Compare options with concept

    The other options describe other Elasticsearch operations, not percolate queries.
  3. Final Answer:

    To find stored queries that match a new document -> Option A
  4. Quick Check:

    Percolate query = find matching stored queries [OK]
Hint: Percolate queries match queries to documents, not documents to queries [OK]
Common Mistakes:
  • Confusing percolate query with regular search
  • Thinking it updates or deletes documents
  • Mixing it with aggregation queries
2.

Which mapping type must be included in an Elasticsearch index to use percolate queries?

{
  "mappings": {
    "properties": {
      "query": {
        "type": "???"
      }
    }
  }
}
easy
A. "percolator"
B. "text"
C. "keyword"
D. "nested"

Solution

  1. Step 1: Identify required field type for percolate queries

    Elasticsearch requires a special field type called "percolator" to store queries for percolate queries.
  2. Step 2: Match options with required type

    Only "percolator" uses "percolator" type; others are for different purposes.
  3. Final Answer:

    "percolator" -> Option A
  4. Quick Check:

    Percolate field type = "percolator" [OK]
Hint: Use "percolator" type for storing queries in mapping [OK]
Common Mistakes:
  • Using "text" or "keyword" instead of "percolator"
  • Confusing nested type with percolator
  • Omitting the percolator field in mapping
3.

Given the following percolate query, what will it return?

{
  "query": {
    "percolate": {
      "field": "query",
      "document": {
        "message": "Elasticsearch alerting"
      }
    }
  }
}

Assuming the index has stored queries matching documents containing "alerting".

medium
A. Documents containing the word "alerting"
B. An error because "document" is missing an ID
C. All documents in the index
D. Stored queries that match the document with message "Elasticsearch alerting"

Solution

  1. Step 1: Understand percolate query behavior

    The percolate query matches stored queries against the provided document, returning matching stored queries.
  2. Step 2: Analyze the given query

    The query uses "document" with a message field; it will find stored queries matching this document's content.
  3. Final Answer:

    Stored queries that match the document with message "Elasticsearch alerting" -> Option D
  4. Quick Check:

    Percolate query returns matching stored queries [OK]
Hint: Percolate queries return stored queries matching the input document [OK]
Common Mistakes:
  • Thinking it returns documents instead of queries
  • Assuming document ID is required for percolate query
  • Confusing percolate with regular search
4.

Identify the error in this percolate query:

{
  "query": {
    "percolate": {
      "field": "query"
      "document": {
        "content": "Test document"
      }
    }
  }
}
medium
A. "field" should be "query_field"
B. Missing comma between "field" and "document" fields
C. "document" must include an "id" field
D. Percolate query cannot use 'content' field in document

Solution

  1. Step 1: Check JSON syntax in query

    Between "field" and "document" keys, a comma is missing, causing invalid JSON.
  2. Step 2: Validate other parts

    "field" name is correct, "document" can omit "id", and "content" is valid as document content.
  3. Final Answer:

    Missing comma between "field" and "document" fields -> Option B
  4. Quick Check:

    JSON syntax error = missing comma [OK]
Hint: Check commas between JSON fields carefully [OK]
Common Mistakes:
  • Forgetting commas between JSON keys
  • Assuming document must have an ID
  • Changing field names unnecessarily
5.

You want to build an alert system that triggers when new documents match any stored queries. Which steps are necessary to implement this using percolate queries?

hard
A. Use aggregation queries on documents to find alerts
B. Store documents in a normal index, then run a regular search for alerts
C. Create an index with a percolator field, store queries, then percolate new documents against stored queries
D. Create a nested field for queries and filter documents manually

Solution

  1. Step 1: Setup index with percolator field

    Define an index mapping with a "percolator" type field to store queries for reverse matching.
  2. Step 2: Store queries and percolate new documents

    Index the alert queries into the percolator field, then use percolate queries to check if new documents match any stored queries.
  3. Final Answer:

    Create an index with a percolator field, store queries, then percolate new documents against stored queries -> Option C
  4. Quick Check:

    Percolate queries enable alerting by matching docs to stored queries [OK]
Hint: Store queries in percolator field, then percolate new docs [OK]
Common Mistakes:
  • Using regular search instead of percolate queries
  • Not defining percolator field in mapping
  • Trying to use aggregations for alerting