2009-06-28 23 views
5

正在使用Lucene API在「給定半徑範圍內的美國最近城市搜索」功能上工作。在Lucene的 上午索引城市的緯度和長值如下:正確索引Lucene的緯度和經度值

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)); 

由於Lucene的既懂字符串,而不是數字,我填充lat和長值。

例如,如果原始lat和長是41.811846和-87.820628分別填充後,值看起來像:

paddedLatitude - > 「0041.811846」 和paddedLongitude - > 「 - 087.820628」

在構建最近的城市查詢時使用相同的填充(使用Lucene的ConstantScoreRangeQuery類)。

鑑於lat和long值可能是十進制/負數,這是正確的方法來索引它們,這樣我就可以在lucene執行一個範圍/比較運算時在搜索結果中得到正確的最近城市這些值?

謝謝。

回答

6

這裏是關於這個問題的專家Uwe Schindler的Searching Numerical Fields in Lucene的出血性邊緣。您可能需要使用較舊(較慢)的ConstantScoreRangeQuery,因爲Lucene.net稍微落後於Lucene,鏈接中描述的類NumericRangeQuery尚未在Java Lucene中發佈。

1

在Yuval F的回答中的鏈接文章讓我意識到我錯了earlier answer,你似乎依靠。

您不應該按原樣編制負數,特別是在這種情況下,其中一些值爲負數,一些爲正數。

This article似乎對空間搜索有很好的討論。他使用一些變換使所有的值都變爲正值,並且還涉及其他應該注意的主題,例如距離計算。

如果您對值進行編碼,則需要記住的一件事是對索引和構建查詢時進行編碼。

+0

謝謝......那麼十進制數呢? – user74042 2009-06-29 17:14:19