【问题标题】:Neo4j Relationship Index - Search on relationship propertyNeo4j 关系索引 - 搜索关系属性
【发布时间】:2014-08-27 22:22:29
【问题描述】:

我有一个具有以下结构的 neo4j 图。

(账户)---[交易]---(账户)

Transaction 是 neo4j 关系,Account 是节点。

每笔交易都设置了各种属性,例如交易 ID、金额、日期和各种其他银行信息。

我可以通过帐户 ID 进行搜索,它返回正常。但是,当我按事务 ID 搜索时,neo4J 搜索整个图而不是使用索引,搜索失败。

我使用 org.neo4j.unsafe.batchinsert.BatchInserterImpl.createDeferredSchemaIndex() 为 Account.number 和 Transaction.txid 创建了索引。该索引似乎适用于帐户(节点)搜索,但不适用于交易(关系)搜索。 (我还为节点和关系启用了自动索引,但它并没有改变)

我认为不支持对关系属性进行索引,因此考虑制作中间节点来保存属性信息。不过,如果可能的话,我更愿意坚持我原来的设计。

知道如何进行吗?

【问题讨论】:

    标签: java neo4j bigdata


    【解决方案1】:

    您可以使用legacy indexesauto indexes 来索引关系。架构索引不支持索引关系。

    原因:通常您使用使用节点来为您的域中的#things# 或#entities# 建模。关系连接您的世界并将节点放入语义上下文中。遵循该模型时,您通常不必为关系建立索引,因为您的查询总是从 #thing# 开始,它始终是一个节点。

    在你的模型中,你应该重新考虑建模,我想它可能是有意义的

     (account)-[:send]->(transaction)-[:to]->(account).
    

    所以交易本身就是一个东西,因此成为节点。

    【讨论】:

    • 嗨,这就是我的怀疑。确认一下,不支持从 cypher 查询遗留索引,对吧?
    • 确保您可以使用 start 子句查询 cypher 中的旧索引:自动索引使用 START r=relationship:relationship_auto_index(key='value') return r,普通旧索引:start r=relationship:<indexname>(key='value')...
    • 谢谢,我去试试
    • 我与 createdAt 字段有关系,我只想知道它们是什么时候创建的——我不能在这个字段上创建索引吗?重构图表似乎是多余的
    • 我知道这是一篇旧帖子,但在我看来,您似乎在暗示关系不需要具有可索引的属性。如果是这样,我对您建议您如何处理模式设计感兴趣,例如,您想根据关系的年龄进行遍历。一个人(节点)在不同的时间段内认识另一个人?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多