Sign In Start Free Trial
Account

Add to playlist

Create a Playlist

Modal Close icon
You need to login to use this feature.
  • Elasticsearch 8.x Cookbook
  • Toc
  • feedback
Elasticsearch 8.x Cookbook

Elasticsearch 8.x Cookbook

By : Alberto Paro
4 (6)
close
Elasticsearch 8.x Cookbook

Elasticsearch 8.x Cookbook

4 (6)
By: Alberto Paro

Overview of this book

Elasticsearch is a Lucene-based distributed search engine at the heart of the Elastic Stack that allows you to index and search unstructured content with petabytes of data. With this updated fifth edition, you'll cover comprehensive recipes relating to what's new in Elasticsearch 8.x and see how to create and run complex queries and analytics. The recipes will guide you through performing index mapping, aggregation, working with queries, and scripting using Elasticsearch. You'll focus on numerous solutions and quick techniques for performing both common and uncommon tasks such as deploying Elasticsearch nodes, using the ingest module, working with X-Pack, and creating different visualizations. As you advance, you'll learn how to manage various clusters, restore data, and install Kibana to monitor a cluster and extend it using a variety of plugins. Furthermore, you'll understand how to integrate your Java, Scala, Python, and big data applications such as Apache Spark and Pig with Elasticsearch and create efficient data applications powered by enhanced functionalities and custom plugins. By the end of this Elasticsearch cookbook, you'll have gained in-depth knowledge of implementing the Elasticsearch architecture and be able to manage, search, and store data efficiently and effectively using Elasticsearch.
Table of Contents (20 chapters)
close

Mapping a GeoPoint field

Elasticsearch natively supports the use of geolocation types – special types that allow you to localize your document in geographic coordinates (latitude and longitude) around the world.

Two main types are used in the geographic world: the point and the shape. In this recipe, we'll look at GeoPoint – the base element of geolocation.

Getting ready

You will need an up-and-running Elasticsearch installation, as we described in the Downloading and installing Elasticsearch recipe of Chapter 1Getting Started.

To execute the commands in this recipe, you can use any HTTP client, such as curl (https://curl.haxx.se/), Postman (https://www.getpostman.com/), or similar. I suggest using the Kibana console, which provides code completion and better character escaping for Elasticsearch.

How to do it…

The type of the field must be set to geo_point to define a GeoPoint.

We can extend the order example by adding a new field that stores the location of a customer. This will result in the following output:

PUT test/_mapping
{ "properties": {
    "id": {"type": "keyword",},
    "date": {"type": "date"},
    "customer_id": {"type": "keyword"},
    "customer_ip": {"type": "ip"},
    "customer_location": {"type": "geo_point"},
    "sent": {"type": "boolean"}
} }

How it works…

When Elasticsearch indexes a document with a GeoPoint field (lat_lon), it processes the latitude and longitude coordinates and creates special accessory field data to provide faster query capabilities on these coordinates. This is because a special data structure is created to internally manage latitude and longitude.

Depending on the properties, given the latitude and longitude, it's possible to compute the geohash value (for details, I suggest reading https://www.pubnub.com/learn/glossary/what-is-geohashing/). The indexing process also optimizes these values for special computation, such as distance, ranges, and shape match.

GeoPoint has special parameters that allow you to store additional geographic data:

  • lat_lon (the default is false): This allows you to store the latitude and longitude as the .lat and .lon fields. Storing these values improves the performance of many memory algorithms that are used in distance and shape calculus.

It makes sense to set lat_lon to true so that you store them if there is a single point value for a field. This speeds up searches and reduces memory usage during computation.

  • geohash (the default is false): This allows you to store the computed geohash value.
  • geohash_precision (the default is 12): This defines the precision to be used in geohash calculus.

For example, given a geo point value, [45.61752, 9.08363], it can be stored using one of the following syntaxes:

  • customer_location = [45.61752, 9.08363]
  • customer_location.lat = 45.61752
  • customer_location.lon = 9.08363
  • customer_location.geohash = u0n7w8qmrfj

There's more...

GeoPoint is a special type and can accept several formats as input:

  • lat and lon as properties, as shown here:
    { "customer_location": { "lat": 45.61752, "lon": 9.08363 },
  • lan and lon as strings, as follows:
    "customer_location": "45.61752,9.08363",
  • geohash as a string, as shown here:
    "customer_location": "u0n7w8qmrfj",
  • As a GeoJSON array (note that here, lat and lon are reversed), as shown in the following code snippet:
    "customer_location": [9.08363, 45.61752]
bookmark search playlist download font-size

Change the font size

margin-width

Change margin width

day-mode

Change background colour

Close icon Search
Country selected

Close icon Your notes and bookmarks

Delete Bookmark

Modal Close icon
Are you sure you want to delete it?
Cancel
Yes, Delete