2017-01-08 2 views
1

저는 bluemix에서 ibm 그래프를 사용하고 있습니다.레이블 이름이있는 모든 정점 얻기

bluemix에서 제공 한 GUI를 사용하여 'test'라는 그래프를 만들고이 그래프에서 ibm이 제공 한 샘플 데이터 'Music Festival'을 업로드했습니다.

이제 아래 쿼리를 사용하여 레이블 '참석자'가있는 모든 정점을 쿼리하려고합니다.

def gt = graph.traversal(); gt.V().hasLabel("attendee");

하지만

Error: Error encountered evaluating script def gt = graph.traversal();gt.V().hasLabel("attendee"); with reason com.thinkaurelius.titan.core.TitanException: Could not find a suitable index to answer graph query and graph scans are disabled: [(~label = attendee)]:VERTEX

아니 내가 잘못하고있는 중이 야 무엇인지 같은 오류 얻고있다.

누군가 내가 잘못 가고 있는지 말할 수 있습니까?

이 오류를 제거하고 예상되는 결과를 얻을 수 있습니까?

감사

답변

2

@Radhika는 귀하의 그렘린 쿼리는 유효한 그렘린의 쿼리입니다. 그러나 일부 공급 업체 (예 : IBM Graph 및 Titan)는 사용자가 인덱싱 된 쿼리 만 사용하여 쿼리를 시작할 수 있도록 허용했습니다. 이는 쿼리의 성능을 확보하는 것입니다. 레이블 색인을 만들 수 없으므로 hasLabel()을 호출하면 Could not find a suitable index... 오류가 발생합니다. 당신이해야 할 것은이 쿼리로 인덱스 속성을 사용하는 단계로이 단계를 수행입니다 :

graph.traversal();gt.V().hasLabel("band").has("genre","pop"); 

아래 볼 수 genre에 대한 인덱스가 샘플 음악 축제 데이터 스키마에 생성 된

{ 
    "propertyKeys": [ 
    { "name": "name", "dataType": "String", "cardinality": "SINGLE" }, 
    { "name": "gender", "dataType": "String", "cardinality": "SINGLE" }, 
    { "name": "age", "dataType": "Integer", "cardinality": "SINGLE" }, 
    { "name": "genre", "dataType": "String", "cardinality": "SINGLE" }, 
    { "name": "monthly_listeners", "dataType": "String", "cardinality": "SINGLE" }, 
    { "name":"date","dataType":"String","cardinality":"SINGLE" }, 
    { "name":"time","dataType":"String","cardinality":"SINGLE" } 
    ], 
    "vertexLabels": [ 
    { "name": "attendee" }, 
    { "name": "band" }, 
    { "name": "venue" } 
    ], 
    "edgeLabels": [ 
    { "name": "bought_ticket", "multiplicity": "MULTI" }, 
    { "name":"advertised_to","multiplicity":"MULTI" }, 
    { "name":"performing_at","multiplicity":"MULTI" } 
    ], 
    "vertexIndexes": [ 
    { "name": "vByName", "propertyKeys": ["name"], "composite": true, "unique": false }, 
    { "name": "vByGender", "propertyKeys": ["gender"], "composite": true, "unique": false }, 
    { "name": "vByGenre", "propertyKeys": ["genre"], "composite": true, "unique": false} 
    ], 
    "edgeIndexes" :[ 
    { "name": "eByBoughtTicket", "propertyKeys": ["time"], "composite": true, "unique": false } 
    ] 

위의 쿼리가 작동하며 동일한 작업을 수행해야하는 이유입니다.

  1. 당신은 스키마가없는 경우, 하나를 만들 수 있습니다. 당신은 위의 한 후 모델 또는 API doc

  2. 당신이에서 당신의 순회를 시작합니다 속성에 대한 (정점/라벨) 인덱스를 생성 따를 수 있습니다. 이 예에서, 정점 특성에 대해서는 Name, Gender and Genre이고 가장자리 특성에 대해서는 name입니다.

  3. 를 호출 schema endpoint 는 나중에 다시 인덱싱 할 필요가 없도록 그래프에 데이터를 추가하기 전에 스키마를 작성하는 것이 좋습니다 그래프

  4. 에 스키마를 추가 할 수 있습니다. 그러면 많은 시간을 절약 할 수 있습니다. .

  5. 스키마를 생성하고 나면 을 이미 수정했지만 나중에 새 속성/색인을 추가 할 수는 없습니다.

정확한 코드는 Java and Nodejs에 대한 다음 코드 샘플을 참조하십시오.

도움이 되었기를 바랍니다.

+0

감사합니다. Alaa. 나는 그것이 유효하지 않을지라도 질의에 무엇이 잘못되었는지 찾아내는 데 하루를 보냈다. 실망 스럽다. 실망 스럽다. – Radhika

+1

@Radhika, 그 이야기는 유감이다. 보시다시피 문제를 게시 해 주시면 즉시 답변 드리겠습니다. 또한 우리의 빈약 한 채널에 가입 하시길 바랍니다. 우리 팀은 기꺼이 당신을 도울 것입니다. http://ibm-graph-slackinvite.mybluemix.net/ –