我有一个使用Jruby的Rails应用程序并嵌入了neo4j数据库。在使用Jruby 1.7.4(JDK 1.7.0)在MacOS 10.8.5下进行开发时,我发出索引查询以检索具有键值对“name:bento&& type:services”的节点,在通过验证后节点确实存在的ActiveRecord。
当我在CentOS 6.4上发出相同的序列时,索引查询不返回任何结果。
我的问题是,为什么我的索引查询不适用于CentOS 6.4,而它适用于MacOS 10.8.5?
以下是MacOS的控制台会话记录,其后是CentOS:
=============================================== =====
[On MacOS 10.8.5, using Jruby 1.7.4 (JDK 1.7.0), using Neo4j Community 1.9.1]
irb(main):001:0> # verify that node with name: bento && type: services exists
irb(main):002:0> Vertex.all.select{|v| v.name == "bento" && v.type=="services"}[0].name
=> "bento"
irb(main):003:0> Vertex.all.select{|v| v.name == "bento" && v.type=="services"}[0].type
=> "services"
irb(main):004:0> # Attempt to retrieve that same node using Neo4j Lucene Index Manager
irb(main):005:0> thisgraph = Neo4j.db.graph
=> #<Java::OrgNeo4jKernel::EmbeddedGraphDatabase:0x662a6d5b>
irb(main):006:0> index_manager = thisgraph.index
=> #<Java::OrgNeo4jKernel::IndexManagerImpl:0x77a89d44>
irb(main):007:0> node_exact_index_manager = index_manager.for_nodes("Node_Exact")
=> #<Java::OrgNeo4jIndexImplLucene::NodeIndex:0xb55bed2>
irb(main):008:0> service = node_exact_index_manager.query("name: bento && type: services").getSingle()
=> #<Java::OrgNeo4jKernelImplCore::NodeProxy:0x2666829a>
irb(main):009:0> service[:name]
=> "bento"
irb(main):010:0> service[:type]
=> "services"
===========================
[On CentOS 6.4, using Jruby 1.7.4 (JDK 1.7.0), using Neo4j Community 1.9.1 ]
# verify that node with name: bento && type: services exists
irb(main):008:0> Vertex.all.select{|v| v.name == "bento" && v.type=="services"}[0].name
=> "bento"
irb(main):009:0> Vertex.all.select{|v| v.name == "bento" && v.type=="services"}[0].type
=> "services"
# Attempt to retrieve that same node using Neo4j Lucene Index Manager
irb(main):011:0> thisgraph = Neo4j.db.graph
=> #<Java::OrgNeo4jKernel::EmbeddedGraphDatabase:0x1acf245f>
irb(main):012:0> index_manager = thisgraph.index
=> #<Java::OrgNeo4jKernel::IndexManagerImpl:0x55fcebbe>
irb(main):013:0> node_exact_index_manager = index_manager.for_nodes("Node_Exact")
=> #<Java::OrgNeo4jIndexImplLucene::NodeIndex:0x20bcb45a>
irb(main):014:0> service = node_exact_index_manager.query("name: bento && type: services").getSingle()
=> nil
=========================
MacOS和CentOS上的两个数据库和索引是相同的。为了更好的衡量,我使用Luke查看了两个索引(MacOS上的一个和CentOS上的索引)并验证我查询的节点确实可以使用查询字符串“name:bento&amp;&amp; type:services”检索
[刚刚证实我们在RedHat上看到与CentOS上相同的行为]
我很感激为什么CentOS上的查询没有产生任何结果的答案。谢谢。
答案 0 :(得分:0)
获取节点索引的语句使用“Node_Exact”作为索引名称参数。
node_exact_index_manager = index_manager.for_nodes("Node_Exact")
实际索引名为Node_exact,小写e。 OsX显然将索引名称视为不区分大小写,而Linux则不是这种情况(CentOS和RedHat版本)。
一旦索引名称参数更正为“Node_exact”,结果就会正确显示。
node_exact_index_manager = index_manager.for_nodes("Node_exact")