Neo4j - 为什么uuid对于所有节点都为null,但是数据库会继续索引它们并尝试在搜索期间使用它们?

时间:2015-08-06 15:43:14

标签: neo4j neo4j.rb

以下是该问题的简要说明:

irb(main):001:0> b = Bisac.first
 CYPHER 268ms MATCH (n:`Bisac`) RETURN n ORDER BY n.uuid LIMIT {limit_1} | {:limit_1=>1}
=> #<Bisac uuid: nil, bisac_code: "MUS037050", bisac_value: "MUSIC / Printed Music / Mixed Collections">

以下是索引:

  ON :Author(uuid)              ONLINE (for uniqueness constraint) 
  ON :Author(author_name)       ONLINE (for uniqueness constraint) 
  ON :Bisac(uuid)               ONLINE (for uniqueness constraint) 
  ON :Bisac(bisac_code)         ONLINE (for uniqueness constraint) 
  ON :Country(country_name)     ONLINE (for uniqueness constraint) 
  ON :Country(uuid)             ONLINE (for uniqueness constraint) 
  ON :Description(uuid)         ONLINE (for uniqueness constraint) 
  ON :Language(iso_639_2_code)  ONLINE (for uniqueness constraint) 
  ON :Language(uuid)            ONLINE (for uniqueness constraint) 
  ON :Publisher(uuid)           ONLINE (for uniqueness constraint) 
  ON :Publisher(publisher_name) ONLINE (for uniqueness constraint) 
  ON :Region(region_name)       ONLINE (for uniqueness constraint) 
  ON :Region(uuid)              ONLINE (for uniqueness constraint) 
  ON :Woka(woka_title)          ONLINE                             
  ON :Woka(uuid)                ONLINE (for uniqueness constraint) 
  ON :Woka(woka_id)             ONLINE (for uniqueness constraint) 

这些uuid可以更改为非空值,因为这些似乎很有用吗? 所有数据都是从CSV文件加载的。 uuid上的所有索引都是在第一次从Ruby on Rails控制台访问数据时创建的,语句如下:b = Bisac.first,或a = Auhtor.first等。

1 个答案:

答案 0 :(得分:4)

由于Neo4j ID可以回收,ActiveNode要求每个模型上的属性可以是唯一的。默认情况下为uuid,但您可以使用id_property方法自行选择。

如果你想填充这个字段,可以使用一个迁移工具来设置这里提到的uuids:

https://github.com/neo4jrb/neo4j/wiki/Neo4j-v3-Migrations

但基本上这些字段是使用Ruby的SecureRandom.uuid设置的。您也可以使用自己的查询在数据库中自己执行此操作,或者如果您能够使用LOAD CSV重建数据库,则可以将其作为列添加到CSV文件中