0

Neo4j :: Rails :: Modelsを使用してNeo4j.rbで簡単なテストを実行しようとしています。このテストでは、単一のモノにタグを付けてから、クエリを実行して、タグを使用してモノを再度検索します。

したがって、データは基本的に次のようになり、1つのタグと1つのものが含まれます。

(タグ)-タグ->(もの)

スクリプトを使用してクエリを実行しても結果は得られませんが、neo4jに付属のwebadminコンソールを使用して同等のクエリを実行すると、実行された結果が得られます。

何が間違っているのか理解できませんが、Neo4j.queryブロックを使用している方法である必要があると思います。

これは私がコンソールから実行したものであり、正しい結果が得られます。

neo4j-sh (0)$ START tag=node:Tag_exact(text='tag') MATCH tag-[:tags]->thing RETURN thing;

==> +------------------------------------------+
==> | thing                                    |
==> +------------------------------------------+
==> | Node[1]{name:"thing",_classname:"Thing"} |
==> +------------------------------------------+
==> 1 row
==> 197 ms
==> 
neo4j-sh (0)$

これは、同等の暗号クエリを提供するが結果を返さないテストスクリプトです。

require 'rubygems'
require 'neo4j'
require 'fileutils'

# Create a new database each time
Neo4j::Config[:storage_path] = "test_neo"
FileUtils.rm_rf(Neo4j::Config[:storage_path])

# Models
class Tag < Neo4j::Rails::Model
    property :text, :index => :exact
end

class Thing < Neo4j::Rails::Model
    property :name
end

# Data
thing = Thing.new(:name => "thing")
thing.save

tag = Tag.new(:text => "tag")
tag.outgoing(:tags) << thing
tag.save

# Query
puts Neo4j::Cypher.query {
  lookup("Tag_exact", "text", "tag").outgoing(:tags).as(:thing)
}.to_s # START v1=node:Tag_exact(text="tag") MATCH (v1)-[:`tags`]->(thing) RETURN thing

results = Neo4j.query do
  lookup("Tag_exact", "text", "tag").outgoing(:tags).as(:thing)
end 

results.each do |result|
  p result["thing"]
end # nil, I want to get the name of thing back here
4

1 に答える 1

2

最後から 2 行目では、クエリの結果にアクセスするために文字列ではなくシンボルを使用します。

result.each do |result|
  p result[:thing]
end

返される列を知るには、columnsメソッドを使用します。

puts Neo4j.query { node(tag_id).outgoing(:tags).as(:thing) }.columns

ところで、cypher クエリの結果は 1 回しかトラバースできないことに注意してください。

于 2012-10-29T14:20:23.503 に答える