2014-10-19 53 views
1
我目前使用的空間我的查詢如下

Neo4j的空間,以便通過距離

START b=node:LocationIndex('withinDistance:[70.67,12.998,6.0]') 
RETURN b 
ORDER BY b.score 

B是有成績,我想通過這個分數來排序的實體,但我發現一個在這種情況下,所有得分爲0的實體都沒有按距離排序。我知道空間自動按距離排序,但是一旦我用另一個字段強制排序,我就會失去這個順序。

是否有強迫這個命令像二階場的任何方式:

START b=node:LocationIndex('withinDistance:[70.67,12.998,6.0]') 
RETURN b 
ORDER BY b.score, ?distance? 

回答

2

不幸的是在當前的空間插件,沒有暗號支撐可言,所以距離函數(或距離結果)不能由ORDER BY訪問。如你已經注意到的那樣,索引本身的withinDistance函數將返回按距離排序的結果。如果您沒有在密碼查詢中添加額外的ORDER BY,則應該保持距離順序。但是,當添加額外的ORDER BY時,原始訂單將丟失。對於密碼開發人員來說,保持ORDER BY中相對相同元素的原始順序是一個有趣的功能要求。

還有一個單獨的計劃來開發密碼本身內的空間功能,並將按照你想要的方式解決問題。但目前還沒有任何有關此開發或發佈計劃的信息。

一個額外的選項可以幫助您在更短的時間範圍內獨立於neo4j開發計劃本身,是將擴展順序添加到空間索引查詢中。現在,您將索引查詢指定爲'withinDistance:[70.67,12.998,6.0]',但您可以編輯Spatial Plugin代碼以支持向此查詢傳遞額外參數,並且它們可以是按參數排序。那麼你將完全控制訂單。

+0

我發現使用密碼,當我們返回'lat'和'lon'時,默認情況下它不會返回距離順序。如何解決它?如果有使用密碼器返回距離的方法?謝謝 – navins 2015-06-03 14:23:34