我正在尝试使用clojure和neocons库将数据从StackOverflow导入Neo4j.请原谅我是一个新手.
这是我在Leiningen的主要功能:
(defn -main
[& args]
(let [neo4j-conn (nr/connect "http://localhost:7777/db/data/")]
(cypher/tquery neo4j-conn "MATCH n OPTIONAL MATCH n-[r]-() DELETE n, r")
(for [page (range 1 6)]
(let [data (parse-string (stackoverflow-get-questions page))
questions (data "items")
has-more (data "has_more")
question-ids (map #(%1 "question_id") questions)
answers ((parse-string (stackoverflow-get-answers question-ids)) "items")]
(map #(import-question %1 neo4j-conn) questions)
(map #(import-answer %1 neo4j-conn) answers)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
我已经定义import-question和import-answer功能,这些工作独立.事实上,奇怪的是我可以删除其中任何一条import-*线,而另一条线条可以正常工作.
任何人都可以看到我做的事情是不是很简单?
对于密码 -
match (m)-[r]-(n) where m.name = 'XYZ' return n.name, type(r), m.name
n.name type(r) m.name
XYZ belongs_to Ordering Status
XYZ runs_on_queue inbound
XYZ runs_on_db DBxc
Run Code Online (Sandbox Code Playgroud)
在这种情况下,订购状态是"拥有"XYZ的业务服务,关系定义如下:
CREATE (XYZ)-[:belongs_to]->(Order)
Run Code Online (Sandbox Code Playgroud)
类型(r)仅给出关系,但不给出关系的方向.这仍然是获得方向的最佳方式 - 我还注意到有关Cypher不可用的评论
谢谢.
有没有办法用py2neo来获取图中所有连接的节点.通过关系连接的所有节点?
用Apache http客户端替换neo4j-jdbc客户端之后挣扎.
似乎在运行仅执行查询的1k个并发用户时仍然存在问题.
这就是我们使用客户端的方式:https: //gist.github.com/IdanFridman/1989b600a0a032329a5e
这是我们使用该rest-client执行查询的方式:
https://gist.github.com/IdanFridman/22637f95ba696f498b6c
在分析后,我们看到上面的糟糕表现结果:
每个请求的avg延迟为3秒.
我们应该抛弃neo4j吗?我们对表演结果感到绝望
谢谢.
我使用Spring-data-neo4j但遇到以下问题.
一切正常,直到我想将查询的LinkedHashMap强制转换为@NodeEntity.这是代码
Movie.class
@NodeEntity
public class Movie {
@GraphId Long id;
@Property(name="title")
private String mtitle;
@Property(name="released")
private String mreleased;
@Property(name="tagline")
private String mtagline;
@Relationship(type = "REVIEWED", direction = Relationship.INCOMING)
private Set<Movie> reviewed;
@Relationship(type = "ACTED_IN", direction = Relationship.INCOMING)
private Set<Movie> actedIn;
@Relationship(type = "DIRECTED", direction = Relationship.INCOMING)
private Set<Movie> directed;
}
Run Code Online (Sandbox Code Playgroud)
他们存储库
@Repository
public interface MovieRepository extends GraphRepository<Movie>{
@Query("MATCH (n) WHERE id(n)={0} RETURN n")
Movie getMovieFromId(Integer idOfMovie);
}
Run Code Online (Sandbox Code Playgroud)
getMovieFromId()在服务中使用时,我得到例外:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.hersbitcloud.cancercloud.domain.Movie
com.sun.proxy.$Proxy55.getMovieFromId(Unknown Source)
com.hersbitcloud.cancercloud.services.GLService.getGL(GLService.java:24) …Run Code Online (Sandbox Code Playgroud) 我下载并安装了neo4j-php-client和neo4j 2.3.2.实际上一切正常,但我只是想知道为什么这个php客户端没有错误处理程序?例如,如果cypher查询中存在错误,则没有错误抛出很容易捕获它.我通过网络搜索,但我找不到解决方案.
有人知道如何打开错误处理程序吗?
提前致谢.
我的节点中有一个String属性,其中String的长度没有修复.现在我必须通过此属性搜索正确的节点,但我从另一个系统获得固定长度值.例如,我的节点的值为'0123',但我获取了信息'000123'进行搜索.
我需要一个像Zeros左边填充的函数,这个在Where子句中
MATCH(a:LABEL)其中leftPad(a.property,6,'0')='000123'返回LIMIT 1
这样的事情可以通过良好的表现吗?
我需要将字段拆分为不同的值,并将每个值存储在不同的节点中。对于每个创建的节点,我要存储位置。例:
Sentence Words
My car is red My;car;is;red
Run Code Online (Sandbox Code Playgroud)
使用方法:
FOREACH (w IN SPLIT(line.TWords, ";") |
MERGE (wd:Word {word: w})
Run Code Online (Sandbox Code Playgroud)
我可以拆分字段并存储不同的单词,但我想存储关系中的位置。
My car is red -[HAS_WORD {position:1}]-> My
My car is red -[HAS_WORD {position:2}]-> car
My car is red -[HAS_WORD {position:3}]-> is
My car is red -[HAS_WORD {position:4}]-> red
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个?
解
USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM 'file:///output_2016-05-06_0203_Neo4jImport.csv' AS line FIELDTERMINATOR "\t"
MERGE (s:Segment{text: line.Source})
MERGE (ta:Segment{text: line.Target})
WITH SPLIT(line.SWords, ";") AS SWords, line, s, ta
UNWIND RANGE(0, SIZE(SWords)-1) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个软件系统(Graph Database)来研究多个组件之间的互连.最终可能会有大约30 TB的数据.我想知道在选择正确的数据库时需要考虑的因素.
我正在寻找的一些选项是Apache Giraph,TitanDB.我也想知道像neo4j或OrientDB这样规模较小的数据库本身是否可行
迈克尔·亨格在2013年初回答了类似的问题,但我无法将他对Neo4j/Cypher 3.x的回应翻译出来.
https://groups.google.com/forum/#!msg/neo4j/qZWhbMtMCTE/r3W7OZfCgAgJ
每个节点都具有UUID值的属性.在某些情况下,"second"属性是布尔值,在其他情况下是字符串.
我想更新其中一些节点,更改或添加属性到每个节点.
(n1 {uuid:"foo1", enabled: true})
(n2 {uuid:"foo2", example: "foo"})
(n3 {uuid:"foo3"})
Run Code Online (Sandbox Code Playgroud)
我当然可以为每个创建一个单独的MERGE和SET语句,但我希望有一个更优雅的解决方案:
MATCH (S {uuid:"foo0"})
MERGE (n2 {uuid:"foo2"})-[:BELONGS_TO]->(S)
SET n2.example="bar"
MERGE (n3 {uuid:"foo3"})-[:BELONGS_TO]->(S)
SET n3.enabled=true
Run Code Online (Sandbox Code Playgroud) neo4j ×10
cypher ×6
clojure ×1
connection ×1
foreach ×1
giraph ×1
graph ×1
graphaware ×1
performance ×1
php ×1
py2neo ×1
relationship ×1
split ×1
titan ×1