2012-02-04 2 views

답변

23

정수 시간 소인으로 날짜 및 시간을 색인화하십시오. 그런 다음 다른 타임 스탬프 사이의 날짜를 색인에서 쉽게 검색 할 수 있습니다. 또한 시간 소인의 시간 부분을 별도의 정수로 색인화하여 주어진 날짜 사이의 특정 시간을 조회 할 수 있습니다.

예 : 지금 날짜와 저장 시간 "2012-02-05 오전 8시 15분"색인에 따라서 이다, 저장, "타임 스탬프 = 1328447700"와 "시간 = 815"

당신이 원하는 오전 8 시부 터 오전 9 시까 지 발생한 2012-02-01 및 2012-02-10 사이의 모든 이벤트에 대한 인덱스를 쿼리합니다. 당신은 어떻게 그

이 작업을 수행하는 정확한 구문은 어떻게 Neo4j에 연결에 따라 달라집니다 (REST "> = 800 시간 < = 900> = 1,328,072,400 및 타임 스탬프 < = 1,328,936,399 시간 타임 스탬프"에 대한 인덱스를 쿼리하여 또는 임베디드) 및 사용중인 프로그래밍 언어. 그러나 그 아이디어는 어떤 경우에도 동일합니다.

+8

에포크 날짜와 'ISO8601'시간을 혼합하는 것이 왜 좋은지 설명해 주시겠습니까? 만약 내가 이것을 구현한다면'20131124'와'1130' OR'1385251200'과 41400 (자정 이후 초 :'(11 * 60 + 30) * 60')으로 갈 수 있습니다. 부품을 연결하고'yyyyMMddHHmmss' 형식을 파싱하거나, 표시해야 할 때 두 개의 값을 함께 더한'Calendar.setTimeInMillis'를 수행하십시오. – TWiStErRob

+1

@Phil GraphAware의 TimeTree와 관련된 몇 가지 진전이있는 것으로 보입니다. 이것은 여전히 ​​neo4j에서 특정 범위 내의 시간을 검색하는 최적의 방법입니까? 이 답변은 모든 값을 타임 스탬프로 변환해야하기 때문에 매우 비효율적 인 것으로 보입니다. 그런 다음 추가 월/년 복잡성이 추가되지 않으면 그 값을 그래프의 다른 모든 노드와 비교해야합니다. – NumenorForLife

4

이것은 Josh Adell의 답변입니다. 가독성을 위해, 나는 int 데이터 형식 2147483647 개까지 저장할 수 있습니다

date:19970716 (YYYYMMDD) 
time:203045000 (HHmmssuuu): last three digits for microseconds. 

같은 두 datetime 정수 필드를 가지는 것이 좋습니다. 모험을 느끼는 경우 long 데이터 유형은 최대 9223372036854775807까지 저장할 수 있습니다. http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html


1997-07-16T19:20:30.45Z처럼 ISO 8601 timestamps에서 영감을.

면책 조항 : Neo4J에는 최소한의 경험이 있습니다.

+3

마이크로가 아닌 밀리 초입니다. – TWiStErRob

9

neo4j에서 통합 lucene 색인을 사용하여이를 수행하는 편리한 org.neo4j.index.lucene.LuceneTimeline이 있습니다.

1
with Spring data neo4j 

    public List<Email> getAllEmailData(Date startDate, Date endDate) { 
      List<Email> list = new ArrayList<Email>(); 
      if (startDate == null || endDate == null) { 
       return null; 
      }    
      long first = ConversionsUtils.convertDateToLong(startDate); 
      long second = ConversionsUtils.convertDateToLong(endDate);   

      try { 
       list = emailRepository.searchAllData(first, second); 
       // System.out.println("List size " +list.size()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return list; 
     } 


     @Query(
       "START email=node:__types__(className='com.backend.core.neo.entities.Email') "    
       + "WHERE email.searchDate > {0} and email.searchDate < {1}" 
       + "RETURN email") 
     List<Email> searchAllData(long startDate, long endDate); 

email entity 

@NodeEntity 
public class Email implements Serializable { 

    private static final long serialVersionUID = 1L; 
    public static final String CC = "CC"; 
    public static final String TO = "TO"; 

    @GraphId 
    private Long id; 

    @GraphProperty 
    private Long senderId; 

    @GraphProperty 
    private String subject;  

    @Indexed 
    // @GraphProperty(propertyType = java.util.Date.class) 
    private String dateSent; 

    @Indexed  
    private long searchDate; 

    @GraphProperty 
    private String emailTxt; 
    @GraphProperty 
    private String emailHtml; 
    @GraphProperty 
    private String emailId; 
    //mail to 
    @Fetch 
    @RelatedTo(elementClass = User.class, type = TO, direction = Direction.OUTGOING) 
    private Set<User> intoUsers; 
    //mail shared 
    @Fetch 
    @RelatedTo(elementClass = User.class, type = CC, direction = Direction.OUTGOING) 
    private Set<User> sharedUsers; 
관련 문제