2017-07-03 61 views
1

我有2個問題:索引泰坦/劍鋒

  1. 如何索引這個查詢?

    g.V(vertexId).repeat(out().hasLabel('location')).emit().tree().next() 
    
  2. 泰坦1.0文檔中

    ,只有提供給索引一旦當數據已經插入的圖表的方式。 但是在generate-modern.groovy文件here
    我們看到索引是在創建似乎合理的頂點之前完成的。試圖但是我無法做到這一點時使用buildMixedIndex,因爲它是扔我

    非法參數異常:未知的外圍股指的後端搜索

我的做法是

def location = mgmt.makeVertexLabel("location").make() 
def displayName = mgmt.makePropertyKey("displayName").dataType(String.class).cardinality(Cardinality.SINGLE).make() 
def shortName = mgmt.makePropertyKey("shortName").dataType(String.class).cardinality(Cardinality.SINGLE).make() 
def description = mgmt.makePropertyKey("description").dataType(String.class).cardinality(Cardinality.SINGLE).make() 
def latitude = mgmt.makePropertyKey("latitude").dataType(String.class).cardinality(Cardinality.SINGLE).make() 
def longitude = mgmt.makePropertyKey("longitude").dataType(String.class).cardinality(Cardinality.SINGLE).make() 

def locationByName = mgmt.buildIndex("displayNameAndShortNameAndDescriptionAndLatitudeAndLongitude", Vertex.class).addKey(displayName).addKey(shortName).addKey(description) 
.addKey(latitude).addKey(longitude).indexOnly(location).buildMixedIndex('search') 

我哪裏錯了?

回答

4
  1. 如果該查詢需要很長時間,問題可能是它訪問了太多的元素,或者它陷入了無限循環。現有的JanusGraph/Titan索引對此沒有幫助。你已經有了id的直接頂點查找,g.V(vertexId),查詢的其餘部分從該頂點遍歷鄰域。我建議使用邊緣標籤,即out('friends'),以限制您訪問的邊緣數量。您也可以使用simplePath()來消除循環路徑。您也可以使用times()until()來限制您在repeat()步驟中循環的次數。

  2. 您引用的配置示例僅使用了複合索引,它不需要索引後端。

Mixed indexes要求配置索引後端,Elasticsearch,Lucene或Solr。選擇其中之一,然後確保在初始化圖形時通過正確的配置屬性。您可以在conf目錄中的分發zip文件中找到若干示例。例如,在janusgraph-cassandra-es.properties,你會發現:

index.search.backend=elasticsearch 
index.search.hostname=127.0.0.1 
index.search.elasticsearch.client-only=true 

其中searchindex.X.backend是你必須通過buildMixedIndex(X)所選擇的指數的配置名稱。

+0

更新後的答案 –

0

這是an answer。 複合索引和混合索引都只適用於第一級gremlin查詢,而不適用於第二級。頂點中心索引是第二級查詢所必需的。