2011-11-16 56 views
0

我們在我們公司有一個基於位置的服務。內容可以通過移動設備精確搜索用戶的位置。此搜索包括使用以下公式進行的距離搜索:Zend Lucene的條件

((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) 

還有一些關於標題,類別,說明的文本搜索。

隨着數百萬條記錄在我們的數據庫中,我們無法優化這個速度,因爲我們想要的速度。然後我們決定給Zend Lucene搜索一下。經過索引lat和lang這樣,

$doc->addField(Zend_Search_Lucene_Field::UnIndexed('lat', '-0.502123'); 
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('lng', '1.502123'); 
$doc->addField(Zend_Search_Lucene_Field::Text('title', 'This is a title'); 
$doc->addField(Zend_Search_Lucene_Field::Text('desc', 'this is a description'); 

如何查詢lat和lng的UnIndexed Lucene_Field上的距離公式?可能嗎?或者有什麼解決辦法嗎?

謝謝 KARTHIK

+0

「將索引lat和lang編碼爲像這樣..」後,您可以設置UnIndexed值。 我不確定。但根據我的經驗,如果你想搜索數據,你應該索引它。 – tasmaniski

回答

1

這是不可能的查詢沒有索引的數據。未索引的數據僅被存儲。

如果要搜索(查詢)經緯度,應將其設置爲索引數據。

看到Zend_Search_Lucene_Field Types

名單也是在這個環節,你有簡單的教程Zend_Search_Lucene

+0

謝謝..但是,我可以在經緯度和長整數後做上述距離公式嗎? – Karthik

+1

我不確定我明白問題在哪裏。無論如何,當你從搜索中得到結果(lat和long)時,可以使用距離公式進行計算,它是標準的PHP數學函數http://php.net/manual/en/ref.math.php。至於PHP,你可以使用任何你想要的距離公式...... – tasmaniski