在neo4j中,如何按日期进行索引并在日期范围内进行搜索。同样的时间,我想在日期范围内在上午8点和上午9点之间进行搜索。在neo4j中,如何按日期进行索引并在日期范围内进行搜索?
回答
将日期和时间索引为整数时间戳。然后,您可以轻松地在索引中搜索其他时间戳之间的日期。您还可以将时间戳的时间部分分别编入另一个整数,以便查询给定日期之间的特定时间。
例子: 的日期和时间存储为“2012-02-05 8:15 AM” 所以在你的索引,存储“时间戳= 1328447700”和“时间= 815”
现在,你想查询2012年2月1日至2012年2月10日期间上午8:00至上午9:00发生的所有事件的索引。你这样做,通过查询索引 “时间戳> = 1328072400和时间戳< = 1328936399和时间> = 800和时间< = 900”
这样做的确切语法取决于你如何连接到的Neo4j(REST或嵌入式)以及您正在使用的编程语言。但是这个想法在任何情况下都是一样的。
你能解释为什么混合时代日期和ISO8601时间是个好主意吗?如果我要实施它,我会选择'20131124'和'1130'或'1385251200'和'41400'(午夜以后的秒数:'(11 * 60 + 30)* 60'),这样您可以连接部件并解析'yyyyMMddHHmmss'格式,或者在需要显示时将两个值相加在一起的'Calendar.setTimeInMillis'。 – TWiStErRob 2013-11-24 11:36:03
@Phil关于GraphAware的TimeTree,似乎有一些进展。这仍然是在neo4j中搜索特定范围内时间的最佳方法吗?这个答案似乎非常非常低效,因为我必须将每个值转换为时间戳,然后将该值与图中的每个其他节点进行比较,如果未添加额外的月/年复杂度。 – NumenorForLife 2015-06-12 01:21:45
这是Josh Adell的答案的扩展。为了增强可读性,我建议有两个date
和time
整数领域,如
date:19970716 (YYYYMMDD)
time:203045000 (HHmmssuuu): last three digits for microseconds.
的int
数据类型可以存储高达2147483647
。如果你感觉冒险,long
数据类型可以存储高达9223372036854775807
。 http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html
从ISO 8601 timestamps灵感像1997-07-16T19:20:30.45Z
。
免责声明:我对Neo4J的使用经验很少。
毫秒不微。 – TWiStErRob 2013-11-24 10:59:38
有一个方便的org.neo4j.index.lucene.LuceneTimeline这样做(在neo4j中使用集成的lucene索引)。
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. 按日期搜索范围
- 2. 在Excel中搜索日期范围内的日期
- 3. Yii2日期范围搜索
- 4. IMAP搜索 - 日期范围
- 5. Excel:在两个日期范围内搜索特定日期
- 6. 在LINQ中搜索日期范围
- 7. 如何在cq页面上按日期查询进行搜索
- 8. 日期索引 - 长范围搜索所有行,小不
- 9. Bing Azure API按日期范围搜索
- 10. 如何索引数值字段并在Lucene.Net中按范围进行搜索?
- 11. 如何使用ActiveRecord模型在日期范围之间进行搜索?
- 12. Amazon DynamoDB:如何搜索日期范围?
- 13. 在日期之间进行搜索如何在jtable中显示
- 14. 日期范围在索引视图
- 15. mysql搜索范围内的日期(日期)
- 16. 日期范围之间进行选择,在这些日期
- 17. Neo4j:给定日期范围内如何查询中间日期
- 18. jqGrid搜索中的日期范围
- 19. 如何在PGSQL中按日期搜索?
- 20. 如何在2个日期和时间之间进行搜索?
- 21. 如何在两个日期之间进行搜索
- 22. 如何在日期之间使用Reddit JSON API进行搜索?
- 23. JS进行验证日期范围
- 24. 如何在带有可变日期的Rails中搜索日期范围
- 25. SilverStripe。在ModelAdmin中按日期范围搜索
- 26. 在cloudant lucene中搜索日期范围内的筛选?
- 27. SharePoint搜索查找日期范围
- 28. mongodb日期范围搜索问题
- 29. jQuery DataTable日期范围搜索
- 30. 验证日期范围搜索
顺便说一句,为什么不使用密码? – Bozho 2012-02-25 08:02:30
密码怎么帮我索引? – Phil 2012-02-26 08:49:05