Azure Cognitive Search Service supported data types includes Edm.GeographyPoint
.
While creating index definition using attributes in C#
, to specify the field type as Edm.GeographyPoint
we can use the GeographyPoint
as the type.
1using Azure.Search.Documents.Indexes;2using Microsoft.Spatial;34public class RestaurantIndexModel5{6 ...78 [SimpleField(IsFilterable = true, IsSortable = true)]9 public GeographyPoint Location { get; set; }1011 ...12}
We need to have the NuGet package Microsoft.Spatial
to use the GeographyPoint
type.
1<PackageReference Include="Microsoft.Spatial" Version="7.8.3" />
And with that, you can create the index definition,
But when you try to index a document with the same type,
1restaurant.Location = GeographyPoint.Create(restaurantResult.Value.Latitude, restaurantResult.Value.Longitude);
You may encounter the following issue,
{“error”:{“code”:"",“message”:“The request is invalid. Details: parameters : Invalid GeoJSON. The ‘type’ member is required, but was not found.\r\n”}}
The way you can fix this is by,
- Add the following NuGet package,
1<PackageReference Include="Microsoft.Azure.Core.Spatial" Version="1.0.0" />
And then annotate your index model to use the MicrosoftSpatialGeoJsonConverter
as the JsonConverter by,
1using System.Text.Json.Serialization;2using Azure.Core.Serialization;3using Azure.Search.Documents.Indexes;4using Microsoft.Spatial;56public class RestaurantIndexModel7{8 ...910 [JsonConverter(typeof(MicrosoftSpatialGeoJsonConverter))]11 [SimpleField(IsFilterable = true, IsSortable = true)]12 public GeographyPoint Location { get; set; }1314 ...15}
That will do.