Определение сопоставления для [location] имеет неподдерживаемые параметры: [geohash: true]: Elasticsearch 5.X

Я использую elasticsearch 5.2, но при настройке сопоставления индекса с [geohash: true] для поля geo_point я получаю следующую ошибку

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "Mapping definition for [location] has unsupported parameters:  [geohash : true]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "Failed to parse mapping [jdloc]: Mapping definition for [location] has unsupported parameters:  [geohash : true]",
    "caused_by": {
      "type": "mapper_parsing_exception",
      "reason": "Mapping definition for [location] has unsupported parameters:  [geohash : true]"
    }
  },
  "status": 400
}

Может ли кто-нибудь сказать мне, обесценился ли [geoshash] или есть другой способ сгенерировать и сохранить геохеш из типа поля geo_point при создании документов?


person Abhishek Adhikary    schedule 22.02.2017    source источник


Ответы (1)


Цитируя документацию,

поля geo_point

Как и числовые поля, в поле «Географическая точка» теперь используется новая древовидная структура BKD. Поскольку эта структура в основном предназначена для многомерных пространственных данных, следующие параметры полей больше не нужны и не поддерживаются: geohash, geohash_prefix, geohash_precision, lat_lon. Геохеши по-прежнему поддерживаются с точки зрения API, и к ним по-прежнему можно получить доступ с помощью расширения поля .geohash, но они больше не используются для индексации данных географических точек.

Похоже, он больше не поддерживается / не нужен. См. здесь. Согласно примеру они используют geohash со следующим отображением.

{
  "mappings": {
    "my_type": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

 PUT my_index/my_type/3
{
  "text": "Geo-point as a geohash",
  "location": "drm3btev3e86" 
}

ОБНОВИТЬ:

Из документации я понимаю, что geohash не поддерживается в сопоставлении, но вы все равно можете получить к нему доступ. Так что он должен рассчитываться автоматически.

Поэтому, когда вы индексируете следующим образом, вы также должны иметь доступ к geohash.

PUT my_index/my_type/1
{
  "text": "Geo-point as an object",
  "location": { 
    "lat": 41.12,
    "lon": -71.34
  }
}
person Rajind Ruparathna    schedule 22.02.2017
comment
Это похоже на создание геохеша из другого источника и его явное сохранение в elasticsearch. Но мне нужно автоматически генерировать геохеш из сохраненных гео-точек, отформатированных в широте. - person Abhishek Adhikary; 22.02.2017