2012-09-06 123 views
0

我们将它看起来像这样的文件:映射ElasticSearch的GeoPoint字段

{ 
    "id": "dQesbpxeQniUWXpsnjPQ", 
    "title": "Golf in Hamburg, Altona", 
    "user": "CtGjEaDxSrhPbf7W7NcH", 
    "location": { 
     "id": "Q6sZhRHdiS3mP2innbJ9", 
     "name": "Hamburg, Altona", 
     "lat": 53.55, 
     "lon": 9.93333, 
     "slug": "hamburg-altona" 
    }, 
    "_type": "announcement" 
} 

我们需要announcement.location.slugnot_analyzed(这是一个蛞蝓,毕竟)

但是映射不会拿,我们有这些设置:

Tire.index(@@index_name) do 
    delete 
    create(mappings: { 
    announcement: { 
     properties: { 
     "id"  => { type: 'string', index: 'not_analyzed' }, 
     "user"  => { type: 'string', index: 'not_analyzed' }, 
     "location" => { 
      type: 'geo_point', 
      properties: { 
      "slug" => { type: 'string', index: 'not_analyzed' } 
      } 
     }, 
     "times" => { type: 'string', analyzer: 'keyword' }, 
     "sport" => { 
      "properties" => { 
      "slug" => { type: 'string', index: 'not_analyzed' } 
      } 
     } 
     } 
    } 
    }, 
    settings: { 
    index: { 
     number_of_shards: 1, 
     number_of_replicas: 0 
    } 
    }) 
    refresh 
end 

注:同样映射curl语法也没有按”工作,但是对于SO的可读性较差,所以我发布了Ruby代码。

好像geo_point正在重写文档那部分的所有其他映射。 The documentation似乎同意。

我敢肯定,有一种方法可以使用lat_lon选项,但我找不到任何有关如何工作的文档。 (我假设一个个体latlon领域的地图,lat_lon设置)

它也有可能,我希望利用the multi field type但似乎并没有主文件的属性应用到整个子树。

如何继续而不必更改我的整个数据模型?

回答

2

恐怕您必须更改模型,因为geo_point是完整的数据类型,您无法在其中添加属性(元)。

+0

自豪地给你你的第一个upvote :) – javanna

+0

我们可以很容易地更改'to_indexed_hash'方法,并且更新映射非常好,幸运的是我们的测试套件捕获了一堆小错误,都很容易修复。感谢您对我的假设的确认! –

+0

谢谢@javanna ;-) – dadoonet