Due to Meilisearch allowing malformed
_geo
fields in the following versions (v0.27, v0.28 and v0.29), please ensure the _geo
field follows the correct format.Preparing documents for location-based search
In order to start filtering and sorting documents based on their geographic location, you must make sure they contain a valid_geo
field.
_geo
is a reserved field. If you include it in your documents, Meilisearch expects its value to conform to a specific format.
When using JSON and NDJSON, _geo
must contain an object with two keys: lat
and lng
. Both fields must contain either a floating point number or a string indicating, respectively, latitude and longitude:
Examples
Suppose we have a JSON array containing a few restaurants:Trying to index a dataset with one or more documents containing badly formatted
_geo
values will cause Meilisearch to throw an invalid_document_geo_field
error. In this case, the update will fail and no documents will be added or modified.Using _geo
with CSV
If your dataset is formatted as CSV, the file header must have a _geo
column. Each row in the dataset must then contain a column with a comma-separated string indicating latitude and longitude:
Filtering results with _geoRadius
and _geoBoundingBox
You can use _geo
data to filter queries so you only receive results located within a given geographic area.
Configuration
In order to filter results based on their location, you must add the_geo
attribute to the filterableAttributes
list:
filterableAttributes
. Depending on the size of your dataset, this might take a considerable amount of time.
You can read more about configuring filterableAttributes
in our dedicated filtering guide.
Usage
Use thefilter
search parameter along with _geoRadius
or _geoBoundingBox
. These are special filter rules that ensure Meilisearch only returns results located within a specific geographic area.
_geoRadius
_geoBoundingBox
Examples
Using our example dataset, we can search for places to eat near the center of Milan with_geoRadius
:
_geoBoundingBox
:
_geoRadius
and _geoBoundingBox
with other filters. We can narrow down our previous search so it only includes pizzerias:
_geo
, _geoDistance
, and _geoPoint
are not valid filter rules. Trying to use any of them with the filter
search parameter will result in an invalid_search_filter
error.Sorting results with _geoPoint
Configuration
Before using geosearch for sorting, you must add the_geo
attribute to the sortableAttributes
list:
sortableAttributes
here.
Usage
Examples
The_geoPoint
sorting function can be used like any other sorting rule. We can order documents based on how close they are to the Eiffel Tower:
_geoPoint
also works when used together with other sorting rules. We can sort restaurants based on their proximity to the Eiffel Tower and their rating: