From 9e532ed4b70ae3b7cefd0c3921b3230e6d1cac37 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Mon, 15 Sep 2025 19:32:24 +0200 Subject: [PATCH 1/6] add geojson and geoPolygon documentation --- .code-samples.meilisearch.yaml | 5 ++ learn/filtering_and_sorting/geosearch.mdx | 67 +++++++++++++++++++---- reference/api/search.mdx | 31 +++++++++-- 3 files changed, 86 insertions(+), 17 deletions(-) diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index 22143d22a9..e392fe894a 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -685,6 +685,11 @@ geosearch_guide_filter_usage_3: |- -X POST 'MEILISEARCH_URL/indexes/restaurants/search' \ -H 'Content-type:application/json' \ --data-binary '{ "filter": "_geoBoundingBox([45.494181, 9.214024], [45.449484, 9.179175])" }' +geosearch_guide_filter_usage_4: |- + curl \ + -X POST 'MEILISEARCH_URL/indexes/restaurants/search' \ + -H 'Content-type:application/json' \ + --data-binary '{ "filter": "_geoPolygon([45.494181, 9.214024], [45.449484, 9.179175], [45.449486, 9.179177])" }' geosearch_guide_sort_settings_1: |- curl \ -X PUT 'MEILISEARCH_URL/indexes/restaurants/settings/sortable-attributes' \ diff --git a/learn/filtering_and_sorting/geosearch.mdx b/learn/filtering_and_sorting/geosearch.mdx index 3bec6c98da..a001e0ae62 100644 --- a/learn/filtering_and_sorting/geosearch.mdx +++ b/learn/filtering_and_sorting/geosearch.mdx @@ -21,9 +21,9 @@ Due to Meilisearch allowing malformed `_geo` fields in the following versions (v ## 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. +In order to start filtering and sorting documents based on their geographic location, you must make sure they contain a valid `_geo` or `_geojson` field. -`_geo` is a reserved field. If you include it in your documents, Meilisearch expects its value to conform to a specific format. +`_geo` and `_geojson` are reserved fields. If you include one of them 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: @@ -37,6 +37,37 @@ When using JSON and NDJSON, `_geo` must contain an object with two keys: `lat` a } ``` +`_geojson` must be an object whose contents follow the [GeoJSON specification](https://geojson.org/): + +```json +{ + … + "_geojson": { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [0.0, 0.0] + } + } +} +``` + +Meilisearch does not support transmeridian shapes. If your document includes a transmeridian shape, split it into two separate shapes grouped as a `MultiPolygon` or `MultiLine`. Transmeridian shapes are polygons that cross the 180th or antimeridian. + +Meilisearch does not support polygons with holes. If your polygon consists of an external ring and an inner empty space, Meilisearch ignores the hole and treats the polygon as a solid shape. + + +### Using `_geo` and `_geojson` together + +If your application requires both sorting by distance to a point and filtering by shapes other than a circle or a rectangle, you will need to add both `_geo` and `_geojson` to your documents. + +When handling documents with both fields, Meilisearch: + +- Ignores `_geojson` values when sorting +- Ignores `_geo` values when filtering with `_geoPolygon` +- Matches both `_geo` and `_geojson` values when filtering with `_geoRadius` and `_geoBoundingBox` + + ### Examples Suppose we have a JSON array containing a few restaurants: @@ -67,7 +98,7 @@ Suppose we have a JSON array containing a few restaurants: ] ``` -Our restaurant dataset looks like this once we add geopositioning data: +Our restaurant dataset looks like this once we add `_geo` data: ```json [ @@ -122,13 +153,15 @@ If your dataset is formatted as CSV, the file header must have a `_geo` column. "3","Artico Gelateria Tradizionale","Via Dogana, 1, 20123 Milan, Italy","ice cream",10,"48.8826517,2.3352748" ``` -## Filtering results with `_geoRadius` and `_geoBoundingBox` +CSV files do not support the `_geojson` attribute. + +## Filtering results with `_geoRadius`, `_geoBoundingBox`, and `_geoPolygon` -You can use `_geo` data to filter queries so you only receive results located within a given geographic area. +You can use `_geo` and `_geojson` 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: +To filter results based on their location, you must add `_geo` or `_geojson` to the `filterableAttributes` list: @@ -138,7 +171,7 @@ Meilisearch will rebuild your index whenever you update `filterableAttributes`. ### Usage -Use the [`filter` search parameter](/reference/api/search#filter) along with `_geoRadius` or `_geoBoundingBox`. These are special filter rules that ensure Meilisearch only returns results located within a specific geographic area. +Use the [`filter` search parameter](/reference/api/search#filter) along with `_geoRadius` and `_geoBoundingBox`. These are special filter rules that ensure Meilisearch only returns results located within a specific geographic area. If you are using GeoJSON for your documents, you may also filter results with `_geoPolygon`. ### `_geoRadius` @@ -149,7 +182,13 @@ _geoRadius(lat, lng, distance_in_meters) ### `_geoBoundingBox` ``` -_geoBoundingBox([{lat}, {lng}], [{lat}, {lng}]) +_geoBoundingBox([LAT, LNG], [LAT, LNG]) +``` + +### `_geoPolygon` + +``` +_geoPolygon([LAT, LNG], [LAT, LNG], [LAT, LNG], …) ``` ### Examples @@ -162,6 +201,10 @@ We also make a similar query using `_geoBoundingBox`: +And with `_geoPolygon`: + + + ```json [ { @@ -189,7 +232,7 @@ We also make a similar query using `_geoBoundingBox`: ] ``` -It is also possible to combine `_geoRadius` and `_geoBoundingBox` with other filters. We can narrow down our previous search so it only includes pizzerias: +It is also possible to combine `_geoRadius`, `_geoBoundingBox`, and `_geoPolygon` with other filters. We can narrow down our previous search so it only includes pizzerias: @@ -217,11 +260,13 @@ It is also possible to combine `_geoRadius` and `_geoBoundingBox` with other fil ### Configuration -Before using geosearch for sorting, you must add the `_geo` attribute to the `sortableAttributes` list: +Before using geosearch for sorting, you must add the `_geo` attribute to the [`sortableAttributes` list](/learn/filtering_and_sorting/sort_search_results): -[Read more about `sortableAttributes` here.](/learn/filtering_and_sorting/sort_search_results) + +It is not possible to sort documents based on the `_geojson` attribute. + ### Usage diff --git a/reference/api/search.mdx b/reference/api/search.mdx index 42d47216b6..234bf13e66 100644 --- a/reference/api/search.mdx +++ b/reference/api/search.mdx @@ -481,9 +481,9 @@ You can then use the filter in a search query: -#### Filtering results with `_geoRadius` and `_geoBoundingBox` +#### Filtering results with `_geoRadius`, `_geoBoundingBox`, and `_geoPolygon` -If your documents contain `_geo` data, you can use the `_geoRadius` and `_geoBoundingBox` built-in filter rules to filter results according to their geographic position. +If your documents contain `_geo` or `_geojson` data, you can use the following built-in filter rules to filter results according to their geographic position: @@ -504,10 +504,10 @@ _geoRadius(lat, lng, distance_in_meters) `_geoBoundingBox` establishes a rectangular area based on the coordinates for its top right and bottom left corners. This filter rule requires two arrays of geographic coordinates: ``` -_geoBoundingBox([{lat}, {lng}], [{lat}, {lng}]) +_geoBoundingBox([LAT, LNG], [LAT, LNG]) ``` -`lat` and `lng` should be geographic coordinates expressed as floating point numbers. The first array indicates the top right corner and the second array indicates the bottom left corner of the bounding box. +`LAT` and `LNG` should be geographic coordinates expressed as floating point numbers. The first array indicates the top right corner and the second array indicates the bottom left corner of the bounding box. @@ -515,6 +515,23 @@ Meilisearch will throw an error if the top right corner is under the bottom left + +`_geoPolygon` establishes an area based on the coordinates of the specified points. This filter rule requires three arrays or more arrays of geographic coordinates and can only be used with GeoJSON documents: + +``` +_geoPolygon([LAT, LNG], [LAT, LNG], [LAT, LNG], …) +``` + +`LAT` and `LNG` should be geographic coordinates expressed as floating point numbers. If your polygon is not closed, Meilisearch will close it automatically. Closed polygons are polygons where the first and last points share the same coordinates. + + + +Polygons cannot cross the 180th meridian. If a shape crosses the antimeridian, you must make two polygons and join them using the `AND` filter operator. + +`_geoPolygon` is not compatible with documents using only `_geo` data. You must specify a `_geojson` attribute to use `_geoPolygon`. + + + If any parameters are invalid or missing, Meilisearch returns an [`invalid_search_filter`](/reference/errors/error_codes#invalid_search_filter) error. @@ -924,7 +941,7 @@ You can search for science fiction books ordered from cheapest to most expensive #### Sorting results with `_geoPoint` -When dealing with documents containing geolocation data, you can use `_geoPoint` to sort results based on their distance from a specific geographic location. +When dealing with documents containing `_geo` data, you can use `_geoPoint` to sort results based on their distance from a specific geographic location. `_geoPoint` is a sorting function that requires two floating point numbers indicating a location's latitude and longitude. You must also specify whether the sort should be ascending (`asc`) or descending (`desc`): @@ -946,7 +963,9 @@ Queries using `_geoPoint` will always include a `geoDistance` field containing t ] ``` -[You can read more about location-based sorting in our dedicated guide.](/learn/filtering_and_sorting/geosearch#sorting-results-with-_geopoint) +Geographic sorting is only compatible with documents containing `_geo` data. `_geoPoint` ignores all data in the `_geojson` object. + +[You can read more about location-based sorting in the dedicated guide.](/learn/filtering_and_sorting/geosearch#sorting-results-with-_geopoint) ### Matching strategy From 01d6acfb24dc0516d77548d4cc8eff10e5cdb850 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 15 Sep 2025 17:33:12 +0000 Subject: [PATCH 2/6] Update code samples [skip ci] --- .../samples/code_samples_get_vector_store_settings_1.mdx | 7 +++++++ ...s_primary_field_guide_update_document_primary_key.mdx | 4 +++- .../code_samples_reset_vector_store_settings_1.mdx | 7 +++++++ snippets/samples/code_samples_swap_indexes_2.mdx | 9 +++++++++ snippets/samples/code_samples_update_an_index_1.mdx | 4 +++- snippets/samples/code_samples_update_an_index_2.mdx | 8 ++++++++ .../code_samples_update_vector_store_settings_1.mdx | 9 +++++++++ 7 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 snippets/samples/code_samples_get_vector_store_settings_1.mdx create mode 100644 snippets/samples/code_samples_reset_vector_store_settings_1.mdx create mode 100644 snippets/samples/code_samples_swap_indexes_2.mdx create mode 100644 snippets/samples/code_samples_update_an_index_2.mdx create mode 100644 snippets/samples/code_samples_update_vector_store_settings_1.mdx diff --git a/snippets/samples/code_samples_get_vector_store_settings_1.mdx b/snippets/samples/code_samples_get_vector_store_settings_1.mdx new file mode 100644 index 0000000000..58c324a6a3 --- /dev/null +++ b/snippets/samples/code_samples_get_vector_store_settings_1.mdx @@ -0,0 +1,7 @@ + + +```bash cURL +curl \ + -X GET 'MEILISEARCH_URL/indexes/INDEX_UID/settings/vector-store' +``` + \ No newline at end of file diff --git a/snippets/samples/code_samples_primary_field_guide_update_document_primary_key.mdx b/snippets/samples/code_samples_primary_field_guide_update_document_primary_key.mdx index 9581144fe7..5b10f2f6d2 100644 --- a/snippets/samples/code_samples_primary_field_guide_update_document_primary_key.mdx +++ b/snippets/samples/code_samples_primary_field_guide_update_document_primary_key.mdx @@ -30,7 +30,9 @@ client.index('books').update(primary_key: 'title') ``` ```go Go -client.Index("books").UpdateIndex("title") +client.Index("books").UpdateIndex(&meilisearch.UpdateIndexRequestParams{ + PrimaryKey: "title", +}) ``` ```csharp C# diff --git a/snippets/samples/code_samples_reset_vector_store_settings_1.mdx b/snippets/samples/code_samples_reset_vector_store_settings_1.mdx new file mode 100644 index 0000000000..77213c8703 --- /dev/null +++ b/snippets/samples/code_samples_reset_vector_store_settings_1.mdx @@ -0,0 +1,7 @@ + + +```bash cURL +curl \ + -X DELETE 'MEILISEARCH_URL/indexes/INDEX_UID/settings/vector-store' +``` + \ No newline at end of file diff --git a/snippets/samples/code_samples_swap_indexes_2.mdx b/snippets/samples/code_samples_swap_indexes_2.mdx new file mode 100644 index 0000000000..402cc310f8 --- /dev/null +++ b/snippets/samples/code_samples_swap_indexes_2.mdx @@ -0,0 +1,9 @@ + + +```go Go +client.SwapIndexes([]SwapIndexesParams{ + {Indexes: []string{"indexA", "indexB"}, Rename: true}, + {Indexes: []string{"indexX", "indexY"}, Rename: true}, +}) +``` + \ No newline at end of file diff --git a/snippets/samples/code_samples_update_an_index_1.mdx b/snippets/samples/code_samples_update_an_index_1.mdx index d962419a7a..54a2eccf40 100644 --- a/snippets/samples/code_samples_update_an_index_1.mdx +++ b/snippets/samples/code_samples_update_an_index_1.mdx @@ -28,7 +28,9 @@ client.index('movies').update(primary_key: 'movie_id') ``` ```go Go -client.Index("movies").UpdateIndex("id") +client.Index("movies").UpdateIndex(&meilisearch.UpdateIndexRequestParams{ + PrimaryKey: "id", +}) ``` ```csharp C# diff --git a/snippets/samples/code_samples_update_an_index_2.mdx b/snippets/samples/code_samples_update_an_index_2.mdx new file mode 100644 index 0000000000..af5eddaf0e --- /dev/null +++ b/snippets/samples/code_samples_update_an_index_2.mdx @@ -0,0 +1,8 @@ + + +```go Go +client.Index("movies").UpdateIndex(&meilisearch.UpdateIndexRequestParams{ + UID: "movies_index_rename", +}) +``` + \ No newline at end of file diff --git a/snippets/samples/code_samples_update_vector_store_settings_1.mdx b/snippets/samples/code_samples_update_vector_store_settings_1.mdx new file mode 100644 index 0000000000..5418c2dfd3 --- /dev/null +++ b/snippets/samples/code_samples_update_vector_store_settings_1.mdx @@ -0,0 +1,9 @@ + + +```bash cURL +curl \ + -X PUT 'MEILISEARCH_URL/indexes/INDEX_UID/settings/vector-store' \ + -H 'Content-Type: application/json' \ + --data-binary '"experimental"' +``` + \ No newline at end of file From f6dd76a1e06e030d05dc8152de4a32df006de81c Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 23 Sep 2025 17:48:55 +0200 Subject: [PATCH 3/6] add new geojson error --- reference/errors/error_codes.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reference/errors/error_codes.mdx b/reference/errors/error_codes.mdx index 5525786c70..95055e7c8d 100644 --- a/reference/errors/error_codes.mdx +++ b/reference/errors/error_codes.mdx @@ -212,6 +212,10 @@ This error occurs if: The provided `_geo` field of one or more documents is invalid. Meilisearch expects `_geo` to be an object with two fields, `lat` and `lng`, each containing geographic coordinates expressed as a string or floating point number. Read more about `_geo` and how to troubleshoot it in [our dedicated guide](/learn/filtering_and_sorting/geosearch). +## `invalid_document_geojson_field` + +The `geojson` field in one or more documents is invalid or doesn't match the [GeoJSON specification](https://datatracker.ietf.org/doc/html/rfc7946). + ## `invalid_export_url` The export target instance URL is invalid or could not be reached. From 8e0f8d69819fe3be25fd72ca526212184d16528a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 Sep 2025 15:49:35 +0000 Subject: [PATCH 4/6] Update code samples [skip ci] --- snippets/samples/code_samples_facet_search_3.mdx | 3 ++- .../code_samples_getting_started_add_documents.mdx | 6 +++--- snippets/samples/code_samples_ranking_score_threshold.mdx | 8 ++++++++ snippets/samples/code_samples_rename_an_index_1.mdx | 7 +++++++ snippets/samples/code_samples_typo_tolerance_guide_5.mdx | 6 ++++++ 5 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 snippets/samples/code_samples_ranking_score_threshold.mdx diff --git a/snippets/samples/code_samples_facet_search_3.mdx b/snippets/samples/code_samples_facet_search_3.mdx index 70c2bcdc9d..64fee76d99 100644 --- a/snippets/samples/code_samples_facet_search_3.mdx +++ b/snippets/samples/code_samples_facet_search_3.mdx @@ -49,7 +49,8 @@ client.Index("books").FacetSearch(&meilisearch.FacetSearchRequest{ ```csharp C# var query = new SearchFacetsQuery() { - FacetQuery = "c" + FacetQuery = "c", + ExhaustiveFacetCount: true }; await client.Index("books").FacetSearchAsync("genres", query); ``` diff --git a/snippets/samples/code_samples_getting_started_add_documents.mdx b/snippets/samples/code_samples_getting_started_add_documents.mdx index 9a2a53b200..e3b2e68adb 100644 --- a/snippets/samples/code_samples_getting_started_add_documents.mdx +++ b/snippets/samples/code_samples_getting_started_add_documents.mdx @@ -78,14 +78,14 @@ $client->index('movies')->addDocuments($movies); // // com.meilisearch.sdk // meilisearch-java -// 0.15.0 +// 0.16.1 // pom // // For Gradle // Add the following line to the `dependencies` section of your `build.gradle`: // -// implementation 'com.meilisearch.sdk:meilisearch-java:0.15.0' +// implementation 'com.meilisearch.sdk:meilisearch-java:0.16.1' // In your .java file: import com.meilisearch.sdk; @@ -192,7 +192,7 @@ namespace Meilisearch_demo ```text Rust // In your .toml file: [dependencies] - meilisearch-sdk = "0.29.1" + meilisearch-sdk = "0.30.0" # futures: because we want to block on futures futures = "0.3" # serde: required if you are going to use documents diff --git a/snippets/samples/code_samples_ranking_score_threshold.mdx b/snippets/samples/code_samples_ranking_score_threshold.mdx new file mode 100644 index 0000000000..afa4dcc327 --- /dev/null +++ b/snippets/samples/code_samples_ranking_score_threshold.mdx @@ -0,0 +1,8 @@ + + +```dart Dart +await client + .index('INDEX_NAME') + .search('badman', SearchQuery(rankingScoreThreshold: 0.2)); +``` + \ No newline at end of file diff --git a/snippets/samples/code_samples_rename_an_index_1.mdx b/snippets/samples/code_samples_rename_an_index_1.mdx index c47acef515..cb2efca970 100644 --- a/snippets/samples/code_samples_rename_an_index_1.mdx +++ b/snippets/samples/code_samples_rename_an_index_1.mdx @@ -6,4 +6,11 @@ curl \ -H 'Content-Type: application/json' \ --data-binary '{ "uid": "INDEX_B" }' ``` + +```rust Rust +curl \ + -X PATCH 'MEILISEARCH_URL/indexes/INDEX_A' \ + -H 'Content-Type: application/json' \ + --data-binary '{ "uid": "INDEX_B" }' +``` \ No newline at end of file diff --git a/snippets/samples/code_samples_typo_tolerance_guide_5.mdx b/snippets/samples/code_samples_typo_tolerance_guide_5.mdx index 51bf8e70e6..be212b7fd6 100644 --- a/snippets/samples/code_samples_typo_tolerance_guide_5.mdx +++ b/snippets/samples/code_samples_typo_tolerance_guide_5.mdx @@ -27,6 +27,12 @@ $client->index('movies')->updateTypoTolerance([ ]); ``` +```java Java +TypoTolerance typoTolerance = new TypoTolerance(); +typoTolerance.setDisableOnNumbers(true); +client.index("movies").updateTypoToleranceSettings(typoTolerance); +``` + ```ruby Ruby index('books').update_typo_tolerance({ disable_on_numbers: true }) ``` From d615e4ccd05244a977474b59a2d4ebc1204b59e0 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Wed, 24 Sep 2025 16:29:57 +0200 Subject: [PATCH 5/6] add `resolution` reference --- learn/filtering_and_sorting/geosearch.mdx | 2 +- reference/api/search.mdx | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/learn/filtering_and_sorting/geosearch.mdx b/learn/filtering_and_sorting/geosearch.mdx index a001e0ae62..17a19f6dce 100644 --- a/learn/filtering_and_sorting/geosearch.mdx +++ b/learn/filtering_and_sorting/geosearch.mdx @@ -176,7 +176,7 @@ Use the [`filter` search parameter](/reference/api/search#filter) along with `_g ### `_geoRadius` ``` -_geoRadius(lat, lng, distance_in_meters) +_geoRadius(lat, lng, distance_in_meters, resolution) ``` ### `_geoBoundingBox` diff --git a/reference/api/search.mdx b/reference/api/search.mdx index 234bf13e66..23144a5236 100644 --- a/reference/api/search.mdx +++ b/reference/api/search.mdx @@ -488,13 +488,16 @@ If your documents contain `_geo` or `_geojson` data, you can use the following b -`_geoRadius` establishes a circular area based on a central point and a radius. This filter rule requires three parameters: `lat`, `lng` and `distance_in_meters`. +`_geoRadius` establishes a circular area based on a central point and a radius. This filter rule accepts the following parameters: `lat`, `lng`, `distance_in_meters`, `resolution`. ```json -_geoRadius(lat, lng, distance_in_meters) +_geoRadius(lat, lng, distance_in_meters, resolution) ``` -`lat` and `lng` should be geographic coordinates expressed as floating point numbers. `distance_in_meters` indicates the radius of the area within which you want your results and should be an integer. +- `lat` and `lng` should be geographic coordinates expressed as floating point numbers. +- `distance_in_meters` indicates the radius of the area within which you want your results and should be an integer. +- `resolution` must be an integer between `3` and `1000` inclusive, and is an optional parameter. When using `_geojson` coordinates, `resolution` sets how many points Meilisearch will use to create a polygon that approximates the shape of a circle. Documents using `_geo` data ignore this parameter. Defaults to `125`. Increasing `resolution` may result in performance issues and is only necessary when dealing with large country-sized circles. + From c22301ab411045bc21fc2715e0e5510da9cc5e84 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Wed, 24 Sep 2025 19:39:47 +0200 Subject: [PATCH 6/6] address reviewer feedback --- learn/filtering_and_sorting/geosearch.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/learn/filtering_and_sorting/geosearch.mdx b/learn/filtering_and_sorting/geosearch.mdx index 17a19f6dce..b57a9b92b6 100644 --- a/learn/filtering_and_sorting/geosearch.mdx +++ b/learn/filtering_and_sorting/geosearch.mdx @@ -21,7 +21,7 @@ Due to Meilisearch allowing malformed `_geo` fields in the following versions (v ## 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` or `_geojson` field. +To start filtering documents based on their geographic location, you must make sure they contain a valid `_geo` or `_geojson` field. If you also want to sort documents geogeraphically, they must have a valid `_geo` field. `_geo` and `_geojson` are reserved fields. If you include one of them in your documents, Meilisearch expects its value to conform to a specific format. @@ -52,9 +52,9 @@ When using JSON and NDJSON, `_geo` must contain an object with two keys: `lat` a } ``` -Meilisearch does not support transmeridian shapes. If your document includes a transmeridian shape, split it into two separate shapes grouped as a `MultiPolygon` or `MultiLine`. Transmeridian shapes are polygons that cross the 180th or antimeridian. +Meilisearch does not support transmeridian shapes. If your document includes a transmeridian shape, split it into two separate shapes grouped as a `MultiPolygon` or `MultiLine`. Transmeridian shapes are polygons or lines that cross the 180th meridian. -Meilisearch does not support polygons with holes. If your polygon consists of an external ring and an inner empty space, Meilisearch ignores the hole and treats the polygon as a solid shape. +**Meilisearch does not support polygons with holes**. If your polygon consists of an external ring and an inner empty space, Meilisearch ignores the hole and treats the polygon as a solid shape. ### Using `_geo` and `_geojson` together