Я хотел бы выполнить геолокационные запросы с помощьюварезинкового поиска в моем наборе данных, который выглядит следующим образом:
{"index": {"_index": "city","_type":"city_info", "_id":0} }
{"fields": { "city" : "AGAWAM",
"loc" : [ -72.622739, 42.070206 ],
"pop" : 15338, "state" : "MA"},
"id" : "01001" ,
"type" : "add"}
...
Я могу выполнять множество запросов или агрегатов без каких-либо проблем, но когда дело доходит до запроса с геодезическим фильтром или чем-то, что работает с географическими c координатами, это не работает. Вот мой картографический тест:
PUT /city/_mappings
{
"properties": {
"fields.loc": {
"type": "geo_point"
}
}
}
Я получаю эту ошибку.
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "mapper [fields.loc] of different type, current_type [float], merged_type [geo_point]"
}
],
"type" : "illegal_argument_exception",
"reason" : "mapper [fields.loc] of different type, current_type [float], merged_type [geo_point]"
},
"status" : 400
}
Так что, похоже, мои "fields.lo c" - это float, тогда как в JSON это массив со значениями с плавающей точкой. Я пытался увидеть, что на самом деле было типом "lo c", и это действительно число с плавающей точкой, чего я не понимаю, почему:
GET /city/_mapping
{
"city" : {
"mappings" : {
"properties" : {
"fields" : {
"properties" : {
"city" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"loc" : {
"type" : "float"
...
Так что я не понимаю, а точнее я не знаю, как изменить "lo c" с плавающей точки на точку geo_point. Так как я новичок в работе сasticsearch, я использую только эластичный поиск и кибану для cURL.