在Neo4j 3.4.0 / apoc-3.4.0.1-all.jar应用程序中,我使用以下APOC触发器:
CALL apoc.trigger.add('HAS_VALUE_ON_CREATED_RELATIONSHIPS_TRIGGER',
"UNWIND {createdRelationships} AS r WITH r
WHERE type(r) = 'HAS_VALUE_ON'
CALL apoc.index.addRelationship(r, keys(r)) RETURN true",
{phase:'before'})
CALL apoc.trigger.add('HAS_VALUE_ON_ASSIGNED_RELATIONSHIP_PROPERTIES_TRIGGER',
"UNWIND keys({assignedRelationshipProperties}) AS key
UNWIND {assignedRelationshipProperties}[key] AS map WITH map
WHERE type(map.relationship) = 'HAS_VALUE_ON'
CALL apoc.index.addRelationship(map.relationship, keys(map.relationship)) RETURN true",
{phase:'before'})
基于创建/更新关系属性事件,这些触发器通过apoc.index.addRelationship
APOC过程在手动索引中维护数据。
我在我的应用程序中遇到问题Lucene query language and numeric range,手动索引中的所有这些属性都被视为String
值,即使它们是Integer
,Float
等
这是提到的关于Lucene和数据类型的SO问题中提供的解决方案:
要实现正确的范围查询,您需要使用特定的定义 来自lucene的字段。见Field javadoc
- IntPoint:int为精确/范围查询编制索引。
- LongPoint:长索引为精确/范围查询。
- FloatPoint:为精确/范围查询建立索引。
- DoublePoint:为精确/范围查询双重索引。
因此,您需要确保添加此查询的字段是其中之一 这种类型。如你所说,你使用Neo4j生成的lucene索引。那里 必须是创建这种领域的选择,否则你不是 能够执行适当的范围查询。
理论上是否可以授权APOC apoc.index.addRelationship
程序,以便自动支持适当的数据类型,并根据属性的实际数据类型(Float
)对属性进行索引, Integer
,Long
等)并且不将所有这些视为String
?