Neo4j Cypher:索引数字字段

时间:2014-09-18 07:29:11

标签: ruby-on-rails neo4j spring-data-neo4j

我将Neo4jCyper query

一起使用

我的要求:

如何以优化的方式索引节点的数字字段。

我的人员节点为,

year_month  --> 2014.1 or 2014.2 or 2014.3 and so on 
desc
status

目前索引为,     CREATE INDEX ON:人(year_month)

  1. 是否有任何优化方法专门为数字做索引(使用Cyper查询)?
  2. 我找到了某个地方

    new ValueContext( 1999 ).indexNumeric() for indexing
    
    1. 以上是否可以在Cyper queries
    2. 中使用它

1 个答案:

答案 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)

使用monthyear作为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