У меня проблема с Solr 3.4, я использую его пространственные функции поиска, такие как
Геодист и Геофильт.
Все кажется нормальным, и результаты возвращаются, предположительно, отсортированные по расстоянию от заданной центральной точки.
Однако, поскольку в Solr 3.4 отсутствует возможность возвращать результаты функций в данных, мне пришлось рассчитывать их вручную (в данном случае PHP).
Я прочитал документы, и геодист должен быть функцией, которая реализует функцию haversine для определения географического расстояния между двумя точками широты и долготы. Я перенес функцию на PHP (просто!) И убедился, что она дает правильный результат.
Проблема в : Solr вычислил расстояние в другой формуле, которую я не смог найти. Поэтому, когда я пересчитываю расстояние в PHP, это приводит к непоследовательности расстояний данных (например, 132 мили вместо 83 мили), я не могу допустить разницу.
Мое решение : Я сказал ОК, удобно создать сравнение функций, чтобы посмотреть, не ошибся ли я в своем порте с данными, копался в Код Solr и извлек буквальная реализация hassine в org.apache.solr.search.function.distance.HaversineConstFunction
, и результат был практически идентичен. и сделал этот скрипт тестирования (полный исходный код и данные) .
Мой вывод, что Solr (или Lucene) не использует haversine как реализацию геодиста. Но я не знаю, какое уравнение.
ОБНОВЛЕНИЕ Ошибка была устранена. Я думаю, что зашел слишком далеко со своими тестами. неверные результаты произошли из-за неправильного именования параметров, я использовал order
(тот из SQL) вместо sort
(соглашение Solr), чтобы изменить порядок результатов из веб-службы Solr ,