我将Neo4j
与Cyper query
我的要求:
如何以优化的方式索引节点的数字字段。
我的人员节点为,
year_month --> 2014.1 or 2014.2 or 2014.3 and so on
desc
status
目前索引为, CREATE INDEX ON:人(year_month)
我找到了某个地方
new ValueContext( 1999 ).indexNumeric() for indexing
Cyper queries
?答案 0 :(得分:1)
属性和标签上的索引仅适用于Cypher WHERE
子句中的相等比较:http://docs.neo4j.org/chunked/stable/query-schema-index.html#schema-index-use-index-with-where
要在year_month
属性上使用索引,必须为优化的查找指定完全匹配。
WITH 2014 as year, 5 as month
WITH ((year * 12) + month) as year_month
MATCH (p:Person { year_month: year_month })
RETURN p
以下是针对year_month
上的范围查询和完全匹配查询优化Cypher查询的一些提示。
而不是浮点值,将年和月转换为整数。
转换为:monthIndex = (year * 12) + month
转换自:year = (monthIndex / 12), month = (monthIndex % 12)
使用month
和year
作为year_month
的复合索引创建节点:
WITH 2014 as year, 5 as month
CREATE (michael:Person {
name: "Michael",
year_month: ((year * 12) + month),
year: year,
month: month })
在标签year_month
的{{1}}属性上创建索引:
Person
此方法允许您按范围查询。
按 CREATE INDEX ON :Person(year_month)
和5/2013
之间的范围查询节点:
5/2014