2017-02-22 16 views
0

Я использую elasticsearch 5.2, но при настройке преобразования индекса с помощью [geohash: true] для поля geo_point I ' м получает следующее сообщение об ошибкеОпределение отображения для [location] имеет неподдерживаемые параметры: [geohash: true]: Elasticsearch 5.X

{ 
    "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] был амортизируются или есть другой способ, чтобы генерировать и хранить geohash от типа geo_point поля при создании документов?

ответ

1

Цитируя documentation,

geo_point полей

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

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

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

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

UPDATE:

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

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

PUT my_index/my_type/1 
{ 
    "text": "Geo-point as an object", 
    "location": { 
    "lat": 41.12, 
    "lon": -71.34 
    } 
} 
+0

Это похоже на создание geohash с использованием другого источника и сохранение его elasticsearch явно. Но мне нужно автоматическое создание geohash из хранимых геолокационных точек, созданных с помощью lat lon. –

+0

@AbhishekAdhikary см. Обновленный ответ –