Корректное индексирование значений широты и долготы в Lucene

Я работаю над поиском ближайшего города в США в пределах заданного радиуса. функциональность с использованием Lucene API. Индексирую значения широты и долготы города в Lucene следующим образом:

<code>doc.Add(new Field("latitude", paddedLatitude, Field.Store.YES, Field.Index.UN_TOKENIZED));

doc.Add(new Field("longitude", paddedLongitude, Field.Store.YES, Field.Index.UN_TOKENIZED));
</code>

Поскольку Lucene понимает только строки, а не числа, я добавляю значения lat и long.

Например, если исходные значения lat и long равны 41.811846 и -87.820628 соответственно, значения после заполнения будут выглядеть следующим образом:

paddedLatitude - & gt; "0041.811846" и paddedLongitude - & gt; -087.820628 & quot;

Я делаю то же самое при заполнении запроса ближайшего города (с использованием класса ConceScoreRangeQuery Lucene).

Учитывая тот факт, что значения lat и long могут быть десятичными / отрицательными числами, является ли это правильным подходом для их индексации, чтобы я мог получить правильные ближайшие города в результатах поиска, когда lucene будет выполнять операцию Range / сравнения чисел над этими значениями?

Благодарю.

Ответы на вопрос(2)

Решение Вопроса

Поиск числовых полей в Lucene Уве Шиндлер, эксперт по этому вопросу. Возможно, вам придется использовать более старый (и более медленный) ConstantScoreRangeQuery, потому что Lucene.net немного отстает от Lucene, а класс NumericRangeQuery, описанный в ссылке, еще не был выпущен в Java Lucene.

что я ошибался в предыдущий ответ, на которую вы, похоже, полагаетесь.

Вы не должны индексировать отрицательные числа как есть, особенно в этом случае, когда некоторые значения отрицательны, а некоторые положительны.

Эта статьажется, у @ довольно хорошее обсуждение пространственного поиска. Он использует некоторые преобразования, чтобы сделать все значения положительными, а также затрагивает другие темы, которые вы, вероятно, должны знать, например, расчеты расстояния.

Если вы кодируете значения, нужно помнить, что нужно кодировать их как для индексации, так и при создании запроса.

 user7404229 июн. 2009 г., 19:14
спасибо ... а как насчет десятичных чисел ??
 user7404230 июн. 2009 г., 00:04
Спасибо еще раз .... Я попробовал решение, упомянутое в ссылке выше статьи Sujitpal.blogspot.com / 2008/02 / ... при выполнении запроса Lucene.net выдает исключение: Имя параметра: широта System.ArgumentException: Предоставленное значение выходит за пределы. Имя параметра: широта Вот мой запрос: широта: [131450428 TO 132173263] долгота: [091694457 TO 092664286]

Ваш ответ на вопрос