Отображение полей 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.slug
быть not_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
переопределяет все другие сопоставления в этой части документа. Документация, кажется, согласна.
Я уверен, что есть способ использовать lat_lon
вариант, но я не могу найти документацию о том, как это может работать. (Я предполагаю, что одна карта человека lat
а также lon
поля с lat_lon
настройки)
Это также возможно, я надеялся использовать multi
тип поля, но это не относится ко всем поддеревьям основных атрибутов документа.
Как я могу продолжить, не меняя всю мою модель данных?
1 ответ
Я боюсь, что вы должны изменить свою модель, так как geo_point является полным типом данных, и вы не можете добавить в него свойства (мета).