мы имеем упругий индекс поиска со следующим картированием (с указанием только частичное отображение, имеющего отношение к данному вопросу)Эластичного тип поиска общего отображения и агрегация пробега в зависимости от типа данных
"instFields": {
"properties": {
"_index": {
"type": "object"
},
"fieldValue": {
"fields": {
"raw": {
"index": "not_analyzed",
"type": "string"
}
},
"type": "string"
},
"sourceFieldId": {
"type": "integer"
}
},
"type": "nested"
}
как вы можете видеть fieldValue
типа string
: в исходных данных в базе данных для этого столбца fieldValue
хранится в столбце типа JSON
(в Postgresql). Прецедент такой, что, когда эти данные хранятся fieldValue
может быть действительным JsNumber
, JsString
, JsBoolean
(любой действительный [JsValue][1]
Теперь вопрос в том, что при сохранении этого fieldValue
в ES - это придется быть определенный тип - так мы преобразуем fieldValue
в String
. выдвигая данные в ElasticSearch
Ниже приведен пример данные из поиска эластичного
"instFields": [
{
"sourceFieldId": 1233,
"fieldValue": "Demo Logistics LLC"
},
{
"sourceFieldId": 1236,
"fieldValue": "169451"
}
]
это становится интересно, где сейчас мы хотим запустить различными metrics aggregations на fieldValue
- например, если для sourceFieldId = 1236
затем выполните [avg][3]
по адресу fieldValue
- problem is fieldValue
необходимо было сохранить как string
в ES - изначально fieldValue
был JsValue
Тип поля в приложении. что это лучший способ создать отображение в упругом поиске таким образом, что fieldValue
может быть сохранен с помощью соответствующего типа против string
типа агрегация, так различных метрик может быть запущена из fieldValue
которые типа long
(хотя кодируются как string
в ES)