2015-01-31 1 views
1

나는이 답변을 검색했지만 정확한 해결책이 없습니다.날짜 범위에서 발생한 작업 검색

사람이 좋아하는 항목을 추적하는 간단한 응용 프로그램이 있습니다. 나는 이렇게 관계를 만듭니다 :

  [:favorite] 
(user) ---------------------> (item) 
     timestamp:xxxxxx 

사용자 노드는 항목에 대해 좋아하는 관계를 얻습니다. 그리고 나는 관계 속성으로 타임 스탬프를 저장합니다.

동일한 항목을 즐겨 사용하는 사용자가 여러 명있을 수 있으며 한 사용자가 여러 항목을 즐겨 사용할 수 있습니다. 이제 내 유스 케이스 같은 특정 날짜 범위에서 즐겨 찾기에 추가 된 항목을 찾을 수 있습니다 :

(1) 최근 1 시간 즐겨 찾기 항목

(2) 항목 제 1 회 년 1 월 2015 년 1월 15일 사이에 즐겨 찾기 2015

(3) 항목의 시간이 많다는 분할 나는이 결과를 반환 할 수있는 가장 최적의 방법을 찾기 위해 노력하고 2015년 1월 15일

에 즐겨 찾기. PHP 용 Everyman Neo4j를 사용하고 있습니다.

제 질문은 타임 스탬프 속성을 어떻게 인덱스합니까 (성능이 크게 향상 될 것이라고 생각합니까?).

위의 세 가지 시나리오에 대한 쿼리를 구성하는 최적의 방법은 무엇입니까?

답변

3

일반적으로 그래프의 트리 또는 연결된 목록 구조의 종류로 시간을 모델링합니다. 참조 :

하지만 인덱스에 타임 스탬프 속성을 관계 - 자동 인덱스를 사용하고 그것을 조회 할 수 있습니다 귀하의 사용 사례에 대한

http://neo4j.com/docs/stable/rest-api-configurable-auto-indexes.html

을 나는 그것이 형식을 선택하는 것이 만들 것이라고 생각 당신의 conf/neo4j.propertiesyyyy-mm-dd-hh

변화와 같은 종류의 검색이 용이 :

relationship_auto_indexing=true 
relationship_keys_indexable=timestamp 

하지만 당신은에 다시 인덱스 기존 데이터

시작 확인해 = 관계()

당신이 그것을 조회 할 수 있습니다

start rel = relationship:relationship_auto_index("timestamp:2015-01-*") 
match (user)-[rel]->(item) 
.... 

또는

start rel = relationship:relationship_auto_index("timestamp:2015-01-*") 
return startNode(rel) as user, endNode(rel) as item 

범위는 숫자 값으로하지만, 문자열 가능하면하지 않습니다.

start rel = relationship:relationship_auto_index("timestamp:[2015-01-01-00 TO 2015-02-01-00]") 
return startNode(rel) as user, endNode(rel) as item 
+0

대단히 감사합니다. 당신은 또한 내가 어떻게 시간의 현명한 분할 즐겨 찾기를 반환 할 수있는 해결책을 제안 할 수 있을까요? 즉, 2015 년 1 월 15 일에, 그 날의 매시간, 즉 00:00에서 01:00, 01:00 & 02:00 사이에 특정 상품 A에 대해 수신 된 즐겨 찾기의 수를 찾고 싶습니다. .. 23:00 & 00:00. 쿼리를 24 번 실행하는 것은 아름답 지 않습니다. – Ninja

+0

타임 스탬프 속성이있는 다른 관계 ("cities_visited")가있는 경우 자동 인덱스는 cities_visited와 faved relationship의 타임 스탬프를 어떻게 구별합니까?즉, 다른 유형의 관계에 대한 타임 스탬프 값을 저장하는 데 다른 속성 이름을 사용해야합니까? 관계 색인에 특성을 추가 할 때 명심해야 할 성능 고려 사항이 있습니까? – Ninja