我一直在玩 Neo4j 自动索引,我很困惑......
我正在使用什么:
- neo4j-community-1.8.M05
- ruby1.9.3p194
以下代码也在https://github.com/LouisSayers/Neo4jChallenges
我的目的是创建具有唯一“uuid”值(由我生成)的节点。为了确保它们是唯一的,我的想法是检查索引,如果 uuid 值已经存在,那么我会生成一个新的 uuid 值。
我看到的是,对于我的一个 uuid('blahblahuuid')来说,这是可行的,但对于另一个它却没有......而且我不知道为什么(检查 Neo4j 监控工具控制台)。
如果您在 ruby1.9.3 上全新安装 neo4j(不更改属性等)尝试下面的代码,那么希望您会看到我所看到的行为!
这是我的代码:
宝石文件:
source "http://rubygems.org"
source "http://gems.rubyforge.org"
source "http://gemcutter.org"
#gem install bundler -v 1.2.0.pre --pre
ruby '1.9.3'
gem 'bundler', '1.2.0.pre'
gem 'neography', :git => 'https://github.com/maxdemarzi/neography'
测试.rb:
require "rubygems"
require "bundler"
require 'digest/sha1'
require 'securerandom'
Bundler.setup(:default)
require 'neography'
$neo = Neography::Rest.new("http://localhost:7474")
$neo.create_node_index("node_auto_index")
$neo.set_node_auto_index_status(true)
$neo.execute_script("g.clear()")
def generate_uuid(deviceUUID)
uuid = Digest::SHA1.base64digest deviceUUID
existing_node_with_uuid = $neo.get_node_auto_index('uuid', uuid)
until existing_node_with_uuid.nil?
uuid = Digest::SHA1.base64digest (deviceUUID.to_s + SecureRandom.base64(8))
existing_node_with_uuid = $neo.get_node_auto_index('uuid', uuid)
end
uuid
end
def generate_node(deviceUUID)
uuid = generate_uuid(deviceUUID)
secret = SecureRandom.base64(256)
currentTime = DateTime.now
$neo.create_node("uuid" => uuid, "deviceUUID" => deviceUUID,
"secret" => secret, "currentTime" => currentTime)
end
generate_node('blahblahuuid')
generate_node('blahblahuuid')
generate_node('4edb096b479588f6')
generate_node('4edb096b479588f6')
运行代码:
ruby test.rb
在 neo4j 控制台中列出结果:
start all = node(*)
return all;
# 更新
我弄清楚出了什么问题 - 首先我没有正确索引 uuid,我需要添加: $neo.add_node_auto_index_property("uuid")
正如 Max 指出的那样,我的 uuid 中有一个“/”。
也正如 Russell Duhon 所指出的 (https://groups.google.com/forum/?fromgroups#!topic/neo4j/KyW0s5p5-fM)
我应该只使用一个 uuid 库 - 这就是我现在正在做的(使用 uuid gem - https://github.com/assaf/uuid/)然后我不必检查是否存在相同的 uuid - 如uuid 应该是唯一的。
我还对通过neography 传递的所有参数进行编码-因为其中一些可能包含斜杠和'?& ='符号,它们可能会干扰其余的url!
感谢 Max 和 Russell 的帮助!