2012-09-06 169 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