Neo4j APOC apoc.index.addRelationship和非字符串数据类型支持

时间:2018-06-03 07:15:25

标签: indexing neo4j lucene neo4j-apoc

在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值,即使它们是IntegerFloat

这是提到的关于Lucene和数据类型的SO问题中提供的解决方案:

  

要实现正确的范围查询,您需要使用特定的定义   来自lucene的字段。见Field javadoc

     
      
  • IntPoint:int为精确/范围查询编制索引。
  •   
  • LongPoint:长索引为精确/范围查询。
  •   
  • FloatPoint:为精确/范围查询建立索引。
  •   
  • DoublePoint:为精确/范围查询双重索引。
  •   
     

因此,您需要确保添加此查询的字段是其中之一   这种类型。如你所说,你使用Neo4j生成的lucene索引。那里   必须是创建这种领域的选择,否则你不是   能够执行适当的范围查询。

理论上是否可以授权APOC apoc.index.addRelationship程序,以便自动支持适当的数据类型,并根据属性的实际数据类型(Float)对属性进行索引, IntegerLong等)并且不将所有这些视为String

0 个答案:

没有答案