Trong neo4j, làm cách nào tôi có thể lập chỉ mục theo ngày và tìm kiếm trong phạm vi ngày. Cũng trong thời gian, tôi cũng muốn tìm kiếm từ 8 giờ sáng đến 9 giờ sáng trong một phạm vi ngày.Trong neo4j, làm thế nào tôi có thể lập chỉ mục theo ngày và tìm kiếm trong một phạm vi ngày?
Trả lời
Lập chỉ mục ngày và giờ làm dấu thời gian số nguyên. Sau đó, bạn có thể dễ dàng tìm kiếm trong chỉ mục cho các ngày giữa các dấu thời gian khác. Bạn cũng có thể lập chỉ mục phần thời gian của dấu thời gian riêng biệt như một số nguyên khác, cho phép bạn truy vấn thời gian cụ thể giữa các ngày đã cho.
Ví dụ: Ngày và thời gian để lưu trữ là "2012/02/05 08:15" Vì vậy, trong chỉ số của bạn, lưu trữ "timestamp = 1328447700" và "thời gian = 815"
Bây giờ bạn muốn để truy vấn chỉ mục cho tất cả các sự kiện từ 2012-02-01 đến 2012-02-10 diễn ra từ 8:00 sáng đến 9:00 sáng. Bạn làm điều đó bằng cách truy vấn các chỉ số cho "timestamp> = 1328072400 và timestamp < = 1328936399 và thời gian> = 800 và thời gian < = 900"
Cú pháp chính xác để làm điều này phụ thuộc vào cách bạn đang kết nối Neo4j (REST hoặc được nhúng) và ngôn ngữ lập trình nào bạn đang sử dụng. Nhưng ý tưởng là như nhau trong mọi trường hợp.
Bạn có thể giải thích tại sao trộn ngày epoch và thời gian 'ISO8601' là một ý tưởng hay không? Nếu tôi thực hiện nó, tôi sẽ đi với '20131124' và' 1130' OR '1385251200' và' 41400' (giây kể từ nửa đêm: '(11 * 60 + 30) * 60'), theo cách này bạn có thể ghép các phần và phân tích một định dạng 'yyyyMMddHHmmss' HOẶC làm' Calendar.setTimeInMillis' với hai giá trị được thêm vào với nhau khi cần hiển thị. – TWiStErRob
@Phil dường như đã có một số tiến bộ về điều này, liên quan đến TimeTree của GraphAware. Đây có phải là cách tối ưu để tìm kiếm thời gian trong một phạm vi nhất định trong neo4j không? Câu trả lời này có vẻ rất, rất kém hiệu quả, bởi vì tôi sẽ phải chuyển đổi mọi giá trị thành dấu thời gian, và sau đó so sánh giá trị đó với mọi nút khác trong biểu đồ nếu thêm độ phức tạp tháng/năm. – NumenorForLife
Đây là phần mở rộng cho câu trả lời của Josh Adell. Đối với khả năng đọc, tôi khuyên bạn nên có hai date
và time
lĩnh vực nguyên như
date:19970716 (YYYYMMDD)
time:203045000 (HHmmssuuu): last three digits for microseconds.
Các int
datatype có thể lưu trữ tối đa 2147483647
. Nếu bạn cảm thấy thích mạo hiểm, kiểu dữ liệu long
có thể lưu trữ tối đa 9223372036854775807
. http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html
Lấy cảm hứng từ ISO 8601 timestamps như 1997-07-16T19:20:30.45Z
.
Tuyên bố từ chối: Tôi chỉ có ít kinh nghiệm với Neo4J.
Đó là mili giây không vi mô. – TWiStErRob
Có một org.neo4j.index.lucene.LuceneTimeline thuận tiện thực hiện điều này (sử dụng chỉ mục lucene tích hợp trong neo4j).
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;
- 1. Làm cách nào để Lập chỉ mục và tìm kiếm trường Ngày giờ trong Lucene.NET?
- 2. PHP, xem phạm vi ngày có nằm trong một phạm vi ngày khác không
- 3. tìm ngày bị thiếu trong phạm vi ngày
- 4. Số ngày trong phạm vi ngày, trừ ngày cuối tuần và các ngày khác, trong C#
- 5. Tìm phạm vi ngày trong tuần theo ngày hiện tại bằng sql?
- 6. Kiểm tra nếu một phạm vi ngày trong một phạm vi ngày
- 7. Làm cách nào để tìm kiếm giữa một phạm vi ngày, sử dụng mô hình ActiveRecord?
- 8. Tạo báo cáo theo phạm vi ngày trong đường ray
- 9. Tính phạm vi ngày mất tích và phạm vi ngày chồng chéo giữa hai ngày
- 10. Tìm kiếm phạm vi ngày hoặc trường không/không có trong Solr
- 11. Tìm ngày bị thiếu trong một phạm vi nhất định
- 12. Tìm kiếm phạm vi CouchBase
- 13. SELECT COUNT trong phạm vi ngày
- 14. Làm cách nào để bạn truy vấn theo Phạm vi Ngày và Ngày ở Mongo
- 15. Tìm số ngày trong tuần/cuối tuần trong một phạm vi ngày nhất định
- 16. Nhóm SQL theo tần suất trong phạm vi ngày
- 17. Ngày kiểm tra dựa vào phạm vi ngày trong Python
- 18. Tạo một phạm vi ngày
- 19. Solr tìm nạp phạm vi ngày
- 20. Kiểm tra xem một ngày cụ thể có khớp với một phạm vi ngày
- 21. PostgreSQL- Lọc phạm vi ngày
- 22. mysql chọn ngày trong phạm vi 30 ngày
- 23. Phạm vi ngày trong PL/SQL (Oracle)
- 24. Tìm kiếm thẻ meta ngày trong Sharepoint
- 25. Tạo phạm vi ngày trong JodaTime
- 26. Làm thế nào tôi có thể tìm kiếm và thay thế đệ quy trong một thư mục trong Vim?
- 27. Phạm vi ngày trong JXDatePicker của swingx?
- 28. Cách lặp qua một phạm vi ngày trong PL/SQL
- 29. Lấy danh sách ngày trong một phạm vi trong PostgreSQL
- 30. Truy vấn MySQL để nhóm theo phạm vi ngày?
Btw, tại sao không sử dụng Mật mã? – Bozho
Mật mã sẽ giúp tôi lập chỉ mục như thế nào? – Phil