2012-07-05 2 views
2

숫자 비교 연산자 (> =, < =, <,>, ...)를 사용하여 Neo4j에서 수동 색인을 검색 할 수있는 방법이 있습니까? Gremlin 인덱스 예제를 보면, 모두 특정 속성 값으로 검색하는 경향이 있습니다.Gremlin의 숫자 비교 연산자 및 와일드 카드

두 번째 정수에는 첫 번째 double에 'property'라는 속성에 숫자 값이있는 두 가지 유형의 약 10M 관계가 있다고 가정 해보십시오. 나는 두 번 유형의 로그 기반의 유의 확률이다 정확한 속성 값을 알고 있다면

gremlin> g.e(123).getProperty('property') 
==> 1.57479276459179 

지금, 나는 쉽게 그 대신 내가 범위 검색을 수행 할

gremlin> g.idx('index_e_ASSOC').get('property', 1.57479276459179) 
==> e[2421730][31493-ASSOCIATION->53378] 
==> e[4885094][53378-ASSOCIATION->31493] 
==> e[866409][37891-ASSOCIATION->6292] 
==> e[123][6292-ASSOCIATION->37891] 

와 노드를 찾을 수 예를 들어 'property'> = 0 인 모든 가장자리를 찾으십시오. & & '속성'< = 1.6. 이것은 Gremlin과 함께 할 수있는 것입니까? Gremlin users discussion group을 보면 Fulltext Lucene 색인에서 와일드 카드 검색도 약간의 해킹이며, Neo4j API은 도움이되지 않는다고합니다.

편집 : Stackoverflow (Lucene 쿼리 구문을 사용하여 Neo4j의 범위 쿼리 제목)에서 이와 같은 질문을 발견했습니다. 새로운 사용자는 Neo4j 문서로 이어지는 최대 두 개의 하이퍼 링크 만 게시 할 수 있습니다. 숫자 값에 ValueContext를 사용하여 인덱스를 다시 작성했습니다. neo4j 토론 그룹에있는 예를 들어 다음 작성자 : 나는 범위 검색을 사용

start a=node(123) 
match a-[rel]-(b) 
where type(rel) = "ASSOCIATION" AND rel.`property` > 1.0 AND rel.`property` < 2.0 
RETURN b 
LIMIT 20; 

같은 쿼리를 수행 할 수 있습니다 (제목을 관계 쿼리 numericRange 쿼리를 결합). Gremlin의 구문은 무엇입니까? 그것은 문법적으로 정확

g.idx('index_e_ASSOC')[[property: Neo4jTokens.QUERY_HEADER + "[1.0 TO 2.0]"]].count() 

같은, 그러나 그 범위 내에서 속성 가장자리가 비록 수익률 0 결과를 계산해야한다.

답변

2

당신은 모든 가장자리에 그렘린 필터 단계를 사용할 수 있지만,이 테이블 스캔 않습니다 인덱스 index_e_ASSOC 모든 가장자리의 부분 집합이 포함 된 경우

g.E.filter{it.property >= 0 && it.property <= 1.6} 

https://github.com/tinkerpop/gremlin/wiki/Gremlin-Steps

를 참조하십시오, 당신은 사용할 수 있습니다 와일드 카드 쿼리의 범위를 좁히려면 : Neo4jTokens.QUERY_HEADER 그래서 당신은 c를 "%query%"로 확인

start = g.idx('index_e_ASSOC')[['property': Neo4jTokens.QUERY_HEADER + "*"]] 
start.filter{it.property >= 0 && it.property <= 1.6} 

하는 것으로 ould도 다음과 같이 작성하십시오 :

start = g.idx('index_e_ASSOC')[['property': "%query%" + "*"]] 
start.filter{it.property >= 0 && it.property <= 1.6}