Define and Execute Search Queries in Elasticsearch

3 hours
  • 2 Learning Objectives

About this Hands-on Lab

Knowing how to collect, parse, enrich, and index data in Elasticsearch is important, but knowing how to ask the data precise questions is even more crucial. After all, you can’t spell “Elasticsearch” without “search!” Whether you are using Elasticsearch for site search, product search, operational analytics, or business intelligence, knowing how to formulate complex search queries is vital to deriving value from all that data you’ve managed to collect, parse, enrich, and index. In this hands-on lab, you will complete the following tasks:

* Search for a specific term within a field
* Apply a search filter to reduce the searchable data set
* Sort the resulting data
* Highlight the search term in the results
* Paginate the search results

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create a search query that meets the requirements of Query 1.

Use the Kibana console tool to execute the following:

GET shakespeare/_search
{
  "size": 20,
  "sort": [
    {
      "play_name": {
        "order": "asc"
      }
    },
    {
      "line_id": {
        "order": "asc"
      }
    }
  ], 
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "type.keyword": {
              "value": "scene"
            }
          }
        },
        {
          "match": {
            "text_entry": "london"
          }
        }
      ],
      "should": [
        {
          "term": {
            "play_name": {
              "value": "Henry VI Part 1"
            }
          }
        },
        {
          "term": {
            "play_name": {
              "value": "Henry VI Part 2"
            }
          }
        },
        {
          "term": {
            "play_name": {
              "value": "Henry VI Part 3"
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}
Create a search query that meets the requirements of Query 2.

Use the Kibana console tool to execute the following:

GET shakespeare/_search
{
  "from": 0,
  "size": 5,
  "highlight": {
    "pre_tags": ["<strong>"],
    "post_tags": ["</strong>"],
    "fields": {
      "text_entry": {}
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    },
    {
      "line_id": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "text_entry": "death"
          }
        }
      ],
      "filter": {
        "term": {
          "play_name": "Hamlet"
        }
      }
    }
  }
}

Additional Resources

You work as an Elasticsearch consultant and have been hired by a local university looking to implement Elasticsearch for literary research. The team you are working with is creating a UI that will enable students to perform search analysis on various works of literature. The test setup you are working with is a 6-node Elasticsearch cluster loaded with the complete works of Shakespeare. In order for the UI to display the desired search results, you must help the team come up with two search requests that meets the following requirements:

Query 1:

  • The type of the document must be a "scene"
  • The text_entry field must have some form of the word "london" in it
  • The play must be 1 of either "Henry VI Part 1", Henry VI Part 2", or "Henry VI Part 3"
  • The size of the hits array should be equal to the number of hits
  • The results are first sorted by play_name in ascending order and then line_id in ascending order.

Query 2:

  • The text_entry field must have some form of the word "death" in it
  • A filter reduces the data set being search to the play "Hamlet"
  • The results are first sorted by their relevancy score in descending order and then by the line_id in ascending order
  • The search supports pagination and returns the first 5 documents
  • The search results highlight the matched term with <strong>search_term</strong>

To use Kibana, navigate to the public IP address of the coordinator-1 node in your web browser and login with:

  • Username: elastic
  • Password: la_elastic_409

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?