2016-06-01 4 views
0

탄력성 검색과 함께 Titan 1.0을 백엔드로 사용하고 있습니다. titan 문서에서 elasticsearch를 사용하기 위해 인덱스를 작성하는 동안 mixedIndex를 사용한다는 것을 알게되었습니다. 다음은 저의 유스 케이스 및 문제입니다. 서점의 등록 데이터, 등록 시간 및 이름과 나이와 같은 기타 개인 정보에 대한 그래프 데이터베이스를 생성하고 있습니다. 주어진 시간 범위 동안 등록 된 모든 사용자를 쿼리하려고합니다. 즉, 쿼리에 대해 숫자 비교 함수를 원합니다. 내가 함께 등록 시간을 조회 할 때대륙간 탄도 1.0 혼합 지수가 경고와 함께 작동하지 않습니다. - 쿼리에 모든 꼭지점을 반복해야합니다.

PropertyKey propertyKey = mgmt.makePropertyKey("registTime").dataType(Date.class) 
    .cardinality(Cardinality.SINGLE).make() 

timeIndex = mgmt.buildIndex("registeredTime",Vertex.class) 
    .addKey("registTime", Mapping.TEXTSTRING.asParameter()) 
    .buildMixedIndex("search"); 
timeIndex가 성공적으로 만들어

그러나 :

WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes 
을 :

g.V().has("registTime", gt("2015-01-01 00:00:00.000+0000")) 

그것이 나에게주는이 내가 인덱스를 생성하는 방법이다

그리고 gremlin 명령으로 확인했지만 데이터가 바로 거기에 있음을 확인했지만 빈 결과를 제공합니다. 내가 뭐 잘못하고 있니? 이 문제를 어떻게 해결할 수 있습니까?

답변

1

이 오류는 인덱스가 아직 ENABLED이 아님을 의미합니다.

타이탄 인덱스는 INSTALLED, REGISTERED, ENABLEDDISABLED 상태입니다. 자세한 내용은 here을 참조하십시오.

인덱스 상태를 사용하기 전에 ENABLED으로 설정해야합니다. 그렇지 않으면이 경고가 표시됩니다.

인덱스를 활성화하는 방법입니다. 이 전환 될 때까지

mgmt = graph.openManagement() 
mgmt.updateIndex(mgmt.getGraphIndex("registeredTime"), SchemaAction.ENABLE).get() 
mgmt.commit() 

은 그런 지금, 추가 된 모든 데이터가 인덱스됩니다에서, 그것을 그래서

ManagementSystem.awaitGraphIndexStatus(graph, propertyKeyIndexName) 
        .status(SchemaStatus.ENABLED) 
        .timeout(10, ChronoUnit.MINUTES) // set timeout to 10 min 
        .call(); 

을 기다립니다. 당신이 인덱스에 이미 추가 데이터를 원하는 경우 자세한 내용은

mgmt = graph.openManagement() 
mgmt.updateIndex(mgmt.getGraphIndex("registeredTime"), SchemaAction.REINDEX).get() 
mgmt.commit() 

를, 당신의 빠른 응답에 대한 docs herehere

+0

감사를 참조하십시오. 내 인덱스가 제대로 만들어지지 않은 것을 발견했습니다. 데이터 유형 (Date.class) 때문인지 궁금합니다. 그러나 나는 titan 문서에서 혼합 인덱스가 날짜 유형도 지원한다는 것을 알게되었습니다. String.class로 변경하면 올바르게 작성됩니다. – RWM

+0

그리고 심지어 올바르게 작성된 경우에도 mgmt.updateIndex (mgmt.getGraphIndex ("registeredTime"), SchemaAction.ENABLE_INDEX) .get(); 행에서 NullPointerException이 발생합니다. . – RWM