Как я могу отобразить lat и lng для типа geo_point вasticsearch - PullRequest
1 голос
/ 28 мая 2019

Я использую эластичный поиск 7 и гнездо 6.7.

У меня есть индекс, который имеет любой тип, например координату.

в любом случае я отображаю geo_type у меня проблемы.

 client.CreateIndex("staging2", c => c.Mappings(m => m.Map<VenueIndex>(mm => mm.AutoMap())));

это мой код гнезда, и это часть моего поком-класса:

     public object Promotion { get; set; }
    public object Checkin { get; set; }
    public Featured Featured { get; set; }
    public int BinaryType { get; set; }
    public List<WorkingHour> WorkingHours { get; set; }
    [GeoPoint(Name = "location", IgnoreMalformed = true)]
    public Geoloc _geoloc { get; set; }
    public string Neighbourhood { get; set; }
    public List<int> MealTimes { get; set; }
    public string objectID { get; set; }

    public class Geoloc
{

    [Number(NumberType.Double, Name = "lat")]
    public double lat { get; set; }
    [Number(NumberType.Double, Name = "lon")]
    public double lon { get; set; }
}

таким образом, тип GeoLoc имеет тип float

другим способом, когда яВ посте пользователя man все еще есть эта проблема.

мой объект json выглядит примерно так:

{
  "isClubMember": false,
 "rating": 0.0,
 "binaryType": 2,
 "location": {
 "lat":"32.11",
 "lon":"-34.22"
 },
   "neighbourhood": "شهرک والفجر,امیر آباد",
   "mealTimes": [],
   "objectID": "188dc91e-8088-4099-9eb8-00aa73653192"}

где моя ошибка?

1 Ответ

1 голос
/ 29 мая 2019

Модель:

    public class TestClass
    {
        public object Promotion { get; set; }
        public object Checkin { get; set; }
        [GeoPoint(Name = "location", IgnoreMalformed = true)]
        public Geoloc _geoloc { get; set; }
        public string Neighbourhood { get; set; }
        public List<int> MealTimes { get; set; }
        public string objectID { get; set; }
    }
    public class Geoloc
    {
        [Number(NumberType.Double, Name = "lat")]
        public double lat { get; set; }
        [Number(NumberType.Double, Name = "lon")]
        public double lon { get; set; }
    }

Код для создания сопоставления с использованием NEST

var url = "http://localhost:9200";
            var settings = new ConnectionSettings(new Uri(url));
            EsClient = new ElasticClient(settings);

            if (!EsClient.IndexExists("gcheck").Exists)
            {
                var resp = EsClient.CreateIndex("gcheck", c => c
                 .Map<TestClass>(mp => mp
                 .Properties(
                     ps => ps
                 ).AutoMap()
                ));
            }

Вывод сопоставления:

 "gcheck" : {
    "mappings" : {
      "properties" : {
        "binaryType" : {
          "type" : "long"
        },
        "checkin" : {
          "type" : "object"
        },
        "isClubMember" : {
          "type" : "boolean"
        },
        "location" : {
          "type" : "geo_point",
          "ignore_malformed" : true
        },
        "mealTimes" : {
          "type" : "integer"
        },
        "neighbourhood" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "objectID" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "promotion" : {
          "type" : "object"
        },
        "rating" : {
          "type" : "long"
        }
      }
    }
  }
...