С# индекс массива геоточек вложенного эластичного поиска не отображается в кибане

У меня есть следующие классы

public class MyLayer
{
    public List<MyLocation> Locations { get; set; }
}
public class MyLocation
{
    public string Name { get; set; }
    public MyCoordinate Coordinate { get; set; }
}

public class MyCoordinate
{
    public double Lat { get; set; }
    public double Lon { get; set; }
}

И этот код для индексации объектов

var node = new Uri("http://localhost:9200");
        string indexName = "geopoint-tests2";
        var settings = new ConnectionSettings(
            node,
            defaultIndex: "geopoint-tests2"
        );

        var client = new ElasticClient(settings);

        var rootNodeInfo = client.RootNodeInfo();
        if (!rootNodeInfo.ConnectionStatus.Success)
          throw new ApplicationException("Could not connect to Elasticsearch!",
            rootNodeInfo.ConnectionStatus.OriginalException);


        client.CreateIndex(indexName, s => s
        .AddMapping<MyLocation>(f => f
          .MapFromAttributes() 
          .Properties(p => p
            .GeoPoint(g => g.Name(n => n.Coordinate).IndexLatLon()))));

        var loc = new MyLayer()
        {
            Locations = new List<MyLocation>()
        };
        loc.Locations.AddRange(new []
                        {
                          createLocation("Amsterdam", 52.3740300, 4.8896900),
                          createLocation("Rotterdam", 51.9225000, 4.4791700),
                          createLocation("Utrecht", 52.0908300, 5.1222200),
                          createLocation("Den Haag", 52.0908300, 5.1222200)
                        });

        client.Index(loc);

Как вы можете, я хочу проиндексировать массив местоположений, но по какой-то причине я не вижу географический индекс на карте плитки kibana, когда я проиндексировал плоский тип MyLocation, я увидел географический индекс с визуализацией карты.

В kibana 4.0 я вижу, что Location не индексируется, но не могу понять, как его индексировать...

Проблема в коде? Индекс в кибане? Мой подход к индексации массива местоположений?

Спасибо за ваше время и помощь :)


person User1234    schedule 23.06.2015    source источник


Ответы (1)


У меня был успех с этой моделью:

internal class Location
{
    [JsonProperty(PropertyName = "lat")]
    public double Latitude { get; set; }

    [JsonProperty(PropertyName = "lon")]
    public double Longitude { get; set; }

}

а затем сопоставить его с:

.MapFromAttributes()
    .Properties(p =>
        p.GeoPoint(s =>
            s.Name(n => n.Location).IndexGeoHash().IndexLatLon().GeoHashPrecision(12)
            )
        )

Затем он появляется в Кибане

person modec    schedule 27.07.2015