2012-08-28 16 views
0

我已經收錄了一些文件(Neo4j重點的節點)的布爾屬性,它並不總是存在。例如, 節點1Lucene的Neo4j的排序與布爾字段

標籤: 「標籤A」

節點2:

標籤: 「標籤A」(注意,節點1的相同的標籤) 特殊:真正

目標是讓節點2高於節點1查詢「標籤A」。

下面的代碼:

Index<Node> fulltextLucene = graphDb.index().forNodes("my-index"); 
Sort sort = new Sort(new SortField[] {SortField.FIELD_SCORE, 
        new SortField("special", SortField.????, true) }); 
IndexHits<Node> results = fulltextLucene.query("label", new QueryContext("label A").sort(sort)); 

我怎樣才能做到呢?

感謝

回答

0

你確定索引它只有2個可能值的屬性(真,假)?因爲索引意味着創建一個唯一的值,通過它可以知道數據庫中的位置。這個獨特的價值取決於財產的價值。

當你有相同的價值觀許多特性,該指數將創建所謂的碰撞 - 簡單地說,它有一個索引查詢的幾個結果。當您按順序遍歷圖表(沒有索引)時,您還有幾個結果,您必須從中選擇。因此,在僅有2個屬性值的許多節點上具有索引可能毫無價值。

我建議創建具有此優先級值1點,每當你需要一個節點優先對其進行的關係。

+0

有道理,問題是,我只能通過quering Lucene和不穿越新得到的節點,我不知道如何使用Lucene時根據節點的屬性節點進行排序。 – Daniele

+0

不幸的是,我不熟悉REST api。但在純密碼中,它看起來像這樣:cypher 1.8 start n = node:my-index('label:label A')with n,n.special as spc return n order by spc [desc]; – ulkas

+0

與密碼也有道理,問題是我在neo內使用lucene。我使用通配符lucene查詢實現了一個建議功能。 – Daniele

0

如果要排序這樣一個布爾值,你可以只使用字符串排序:SortField.STRING。

這將alfabetically排序的價值,所以假的,再正確的。沒有值(空)來作假。