Здравствуйте, я пытаюсь создать элемент Edm.GeographyPoint в поисковом индексе Azure с помощью Kentico CustomAzureSearchModule . Это активируется при перестроении индекса в Kentico. Я получаю сообщение об ошибке Недопустимое значение, указанное для пространственного свойства. Вы должны указать действительное пространственное значение. . Мой код выглядит следующим образом:
public class CustomAzureSearchModule : Module
{
private string nodeguid = "";
public CustomAzureSearchModule() : base(nameof(CustomAzureSearchModule))
{
}
protected override void OnInit()
{
base.OnInit();
DataMapper.Instance.RegisterMapping(typeof(GeographyPoint), Microsoft.Azure.Search.Models.DataType.GeographyPoint);
DocumentFieldCreator.Instance.CreatingField.After += CreatingField_After;
DocumentCreator.Instance.AddingDocumentValue.Execute += AddingValue;
}
private void CreatingField_After(object sender, CreateFieldEventArgs e)
{
if (e.SearchField.FieldName == "GeoLocation")
{
//Change the field type to Edm.GeographyPoint for Azure Search
e.Field = new Microsoft.Azure.Search.Models.Field("geolocation", Microsoft.Azure.Search.Models.DataType.GeographyPoint);
}
}
private void AddingValue(object sender, AddDocumentValueEventArgs e)
{
if (e.Document.ContainsKey("nodeguid"))
{
nodeguid = e.Document["nodeguid"].ToString(); //Store NodeGuid
}
//}
if (e.AzureName == "geolocation")
{
//Collect nodeGuid and use to get page
TreeNode page = DocumentHelper.GetDocuments()
.WhereEquals("NodeGUID", nodeguid)
.OnCurrentSite()
.Culture("en-gb")
.TopN(1)
.FirstOrDefault();
if (page != null)
{
// Check page type is a service only
if (page.ClassName == ServicePage.CLASS_NAME)
{
//Check for Children
if (page.Children.Count > 0)
{
e.Value = GeographyPoint.Create(31.8, -5); //Add location data to index
}
}
}
}
}
}
}
Буду признателен за любую помощь. В конечном итоге вы захотите создать тип Collection (EDM.GeographyPoint) в индексе Azure с несколькими геокодами. За этой статьей следовал мой код https://devnet.kentico.com/articles/customizing-azure-search-fields