Neo4j似乎不允许我存储二进制对象.这是否意味着我必须将Neo4j与其他数据存储结合使用,例如文件系统.,Oracle等?
说而不是文件我有小树,我需要存储在Lucene索引中.我该怎么做呢?
树中的示例节点:
class Node
{
String data;
String type;
List<Node> children;
}
Run Code Online (Sandbox Code Playgroud)
在上面的节点中,"data"成员变量是一个空格分隔的单词串,因此需要全文可搜索."type"成员变量只是一个单词.
搜索查询将是树本身,并且将搜索每个节点中的数据和类型以及用于匹配的树的结构.在匹配子节点之前,查询必须首先匹配父节点数据和类型.可以接受数据值的近似匹配.
索引此类数据的最佳方法是什么?如果Lucene不直接支持索引这些数据,那么这可以由Solr或Elasticsearch完成吗?
我快速浏览了neo4j,但似乎在db中存储了整个图形,而不是大型集合(比如数十亿或数万亿)的小树结构.或者我的理解是错的?
另外,基于非Lucene的NoSQL解决方案是否更适合这种情况?
我想检索特定数量的随机节点.该图由3 000 000个节点组成,其中一些是源,一些是目标,一些是两者.
目的是检索随机源,因为我不知道如何选择随机,程序生成k个随机数,从1到3 000 000,代表节点ID,然后丢弃所有随机选择的非源的节点.由于此过程非常耗时,我想知道是否可以使用密码查询直接选择随机源.
如果要选择所有源,则查询将如下所示
START t = node(*)MATCH(a) - [:LEADS_TO] - >(t)返回a
有谁知道如何直接用密码选择有限数量的随机节点,或者,如果不可能,建议任何解决方法?
谢谢!
我发现在通过py2neo for Python使用REST API时,Neo4j很慢地添加节点和关系/弧/边缘.我知道这是由于每个REST API调用作为单个自包含事务执行.
具体来说,在localhost上运行时,添加几百个节点之间的关系需要几秒钟.
在使用Python的同时显着提高性能的最佳方法是什么?
使用bulbflow和Gremlin是一种构建批量插入事务的方法吗?
谢谢!
在cypher中是否有任何更新查询,我们可以使用它来更新任何节点或关系的属性?
例如,我有以下节点和关系:
NodeA - [r:relatedTo] - NodeB
其中relatedTo是具有活动或非活动属性的关系
如何使用cypher查询更改此属性?
我相信创建远程连接的方法是更改此行conf/neo4j-server.properties,特别是通过删除注释并重新启动服务器.
org.neo4j.server.webserver.address=0.0.0.0
Run Code Online (Sandbox Code Playgroud)
我的URL是https://0.0.0.0:7473/browser/在本地机器上工作,但是当我通过3G测试iPhone上的Safari时,它无法连接.
我在属性文件中设置了什么地址?
我以为这是我的电脑的IP地址,但是在尝试了我从Googling" ip address mac " 获得的远程地址后,没有工作,也没有(显然)我机器的本地IP地址,192.168.0.14
我应该指出,将其设置为Google的IP地址会引发错误,日志显示为:
2015-01-29 17:10:08.888+0000 INFO [API] Failed to start Neo Server on port [7474], reason [MultiException[java.net.BindException: Can't assign requested address, java.net.BindException: Can't assign requested address]]
Run Code Online (Sandbox Code Playgroud) 从spring-boot 1.3.2升级到最近发布的1.3.3时,我们遇到了一个问题.
我们的应用程序一直在使用以下依赖项,每个依赖项都是最新的,没有问题:
<neo4j.version>2.3.2</neo4j.version>
<sdn.version>4.0.0.RELEASE</sdn.version>
<sdn.rest.version>3.4.0.RELEASE</sdn.rest.version>
<neo4j.ogm.version>1.1.5</neo4j.ogm.version>
Run Code Online (Sandbox Code Playgroud)
今天我升级了我们的spring-boot和基于Spring Data Neo4j的应用程序,该应用程序通过更改pom.xml从以下内容启动并与spring-boot 1.3.2.RELEASE一起运行良好:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
至
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
由于这实际上是唯一的变化,应用程序现在无法启动以下错误:
...
Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
java.lang.AbstractMethodError: ch.qos.logback.classic.pattern.EnsureExceptionHandling.process(Lch/qos/logback/core/pattern/Converter;)V
at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:88)
at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:167)
at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182)
at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:152)
at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:122)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:378)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:328)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349)
at com.mycompany.Application.<clinit>(Application.java:35)
Run Code Online (Sandbox Code Playgroud)
正如所料,返回1.3.2.RELEASE不会导致任何问题.
到目前为止搜索显示没有可追踪的踪迹.比较mvn dependency:tree使用spring-boot 1.3.2.RELEASE和1.3.3.RELEASE之间的输出,我可以看到ch.qos.logback:logback-classic和ch.qos.logback:logback-access …
我在csv中有一个列如下:
我正在使用此代码来测试日期分割是如何工作的:
LOAD CSV WITH HEADERS FROM
'file:///..some_csv.csv' AS line
WITH
SPLIT(line.date_of_birth, '/') AS date_of_birth
return date_of_birth;
Run Code Online (Sandbox Code Playgroud)
这个代码块工作正常,给了我我期望的东西,这是每个日期的三个值的集合,或者null如果没有日期(例如,
[4, 5, 1971]
[0, 0, 2003]
[0, 0, 2005]
. . .
null
null
. . .
Run Code Online (Sandbox Code Playgroud)
我的问题是,创建的空值有什么问题,为什么在有空值时我不能做MERGE?
LOAD CSV WITH HEADERS FROM
'file:///..some_csv.csv' AS line
WITH
SPLIT(line.date_of_birth, '/') AS date_of_birth, line
MERGE (p:Person {
date_of_birth: date_of_birth
});
Run Code Online (Sandbox Code Playgroud)
上面的这个块给了我错误:
Cannot merge node using null property value for date_of_birth
Run Code Online (Sandbox Code Playgroud)
我已经四处搜索,并且只发现了另外一个关于此错误的问题,这个问题没有答案.其他搜索没有帮助.
我的印象是,如果没有值,那么Neo4j根本就不会创建元素.
我想可能无法生成节点,因为毕竟如果没有值生成节点,如何生成节点?所以,既然我知道没有ID丢失,也许我可以使用ID和日期合并,所以Neo4j总能看到一个值.
但是这段代码没有任何好处(相同的错误信息):
LOAD CSV …Run Code Online (Sandbox Code Playgroud) 他们刚刚宣布,他们改名为Neo5j.
我一直认为4j意味着Java.而且,由于Neo4j是用Java和Scala实现的,并且~4j后缀非常流行(在90年代),我从未想到4j和现在的5j实际上是一个版本面额.
但是在数据库圈子中使用该数字+字母版本控制方案似乎很常见,就像Oracle使用9i,11g和12c一样.
现在的问题是5j代表什么?文章没有回答.谁能帮我解决这个问题?
我一直在使用cypher和neo4j一段时间了,我一次又一次地遇到类似的问题.
我希望能够将"临时"属性添加到仅存在于返回数据中的节点,并且不会持久保存到Neo4j数据库.
例如,我正在处理的当前问题在图数据库中给出了一个N-ary树结构,我想返回一个特定节点的子节点,以及一个信息布尔让我知道那些孩子有孩子的天气.
获取此信息的查询非常简单:
MATCH (parent:Item { guid: "Identifier here" })-[:HASCHILD]->(child:Item)
OPTIONAL MATCH (child)-[:HASCHILD]->(grandchild:Item)
WITH parent, child, LENGTH(COLLECT(grandchild)) > 0 AS has_children
Run Code Online (Sandbox Code Playgroud)
现在我有父母,孩子和布尔让我知道天气还有更多的孩子.
我希望接下来要做的是将has_children布尔值设置为子节点上的属性,但仅仅为了返回查询,我不需要该属性保持不变.
我知道有一些解决方案可以获得我想要的东西但是没有一个是我想要的.
1)我可以创建一个临时节点:(继续上面的查询)
...
WITH parent, child, LENGTH(COLLECT(grandchild)) > 0 AS haschildren,
{
childkey1: child.childkey1,
childkey2: child.childkey2,
...
has_children: haschildren
} AS tempnode
RETURN parent, tempnode
Run Code Online (Sandbox Code Playgroud)
这个解决方案不是很好,你必须知道你正在处理的节点的确切节点类型和所有属性,它在一般情况下不起作用.
2)我可以设置并删除布尔值,暂时将其保存到数据库中(如在Cypher中的Neo4J创建临时变量中所述).
这不是很好,因为它会导致多个数据库写入(添加和删除).此外,它不像选项1那样动态,因为它只能处理简单类型.(选项1可以处理更复杂的情况,例如添加节点集合而不是简单的布尔值).
据我所知,这些是临时返回数据的唯一选择.我想知道我错过了什么吗?是否有可能使这更简单或更动态?
有点像
WITH parent, child, LENGTH(COLLECT(grandchild)) > 0 AS haschildren,
TEMPSET child.has_children = haschildren
Run Code Online (Sandbox Code Playgroud)
请注意,我已经简化了一些示例.我在neo4j中的不同上下文中多次遇到过这个问题.大多数情况下,我要么使用选项1,要么在查询返回后通过应用程序端的后处理构建正确的结构.
有没有更好的办法?