Поле скрипта ElasticSearch возвращает неверное значение долготы - PullRequest
2 голосов
/ 19 ноября 2011

Когда я добавляю:

fields: [ "doc['Location'].lon" ]

для моего запроса значение долготы отличается от того, что показано в источнике документа.

Здесь вы можете увидеть результаты запроса, в котором я извлек doc ['Latitude']. Lon и .lat и _source.Latitude для сравнения:

https://gist.github.com/d9533170f1f50fd27e87 (обратите внимание - они были переданы через json_decode в PHP, но перед использованием json_decode данные такие же).

Впервые я заметил это, когда использовал «doc ['field_name']. Distance (lat, lon)», чтобы попытаться добавить расстояние в качестве поля к моему запросу. Я пробовал оба ключа "script_fields" и "fields", и у каждого был одинаковый результат.

ОБНОВЛЕНИЕ: я заметил, что "doc ['Location']. Lon" возвращает то, что я думал, должно быть doc ['Location']. Lat (lat и lon переключаются.)

1 Ответ

5 голосов
/ 19 ноября 2011

Проблема заключалась в том, что при использовании формата GeoJSON (или использовании lat / long в качестве массива) вы должны переключить порядок значений lat / lng на lng / lat .

Я перестраиваю свой индекс, но чтобы обойти это, я сейчас использовал этот запрос:

doc['Location'].distance( lon + 180, lat ) // Temporary bandaid

Как только я перестрою индекс с правильными значениями, я переключусь обратно на:

doc['field_name'].distance(lat, lon) // The correct method
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...