在neo4j.net客户端中使用cypher foreach
我正在使用neo4jclient v 1.1.0.34使用c#的neo4j,并希望使用foreach更新c#中的多个值的值,我有以下代码: graphClient.Cypher.Match("(u:User)-[:HAS_EMAIL]->(e:Email)-[:HAS_VER_CODE]->(s:VerCode)" ) .Where((User u, Email e, VerCode s) => ( u.id == user.id && e.address == email.address && e.isVerified == false && s.expiry > DateTime.Now)) .Set("s.expiry = {now}") .WithParam("now", DateTime.Now) .ExecuteWithoutResults(); ,上面的代码没有在任何匹配节点上设置到期字段. 我需要将到期字段设置为当前日期时间,
22 2024-04-26
编程技术问答社区
使用optinal match and merge在c#中转换Neo4j查询
我试图转换一个在neo4j桌面中有效的neo4j cypher查询,但是当我试图在c#上使用它时,有人可以帮助我吗? c#查询: var type = typeof(T).Name; var client = Graph.GetClient(); client.Cypher .Match("(location:Location") .Where((Location location) => location.GeoNameId == entityGiven.GeoNameId) .OptionalMatch("()-[r:HAS]->(location)") .Delete("r") .With("l") .Match("admin:" + type + ")")
24 2024-04-26
编程技术问答社区
Neo4j/Cypher。动态属性的匹配
根据开发人员手册第3.2.4节的参数: 参数不能用于以下结构,因为这些构成了>查询结构的一部分,该结构已编译为查询计划: 属性密钥;因此,匹配(n)其中n.$ param ='sosings'是无效的( 是否没有办法(使用官方驱动程序)解决这个问题?我有一种情况,特定类型的节点可以包含从几个至数百个属性中包含的,我希望用户能够搜索其中任何一个,而无需提前编写所有可能的查询.理想情况下,我希望能够做类似的事情 MATCH (a) WHERE ({prop} CONTAINS {val}) RETURN a 提供字典,其中prop: "a.Description"和val: "Freeform item description" 这是完全可能的,还是字符串串联(与相关的缺点)在这里唯一的可能性? 解决方案 @cyberam的响应是获得结果的一种方法,但是正如InverseFalcon所说 - 您失去了索引性能 - 假设您打算使查询更详细一些. 您不
28 2024-04-25
编程技术问答社区
批量插入节点和关系 neo4jclient
我在列表中有许多节点和边缘.目前,我正在浏览列表,并使用一个非常慢的查询插入每个节点.如何使用neo4jclient执行批量插入? 节点对象: public class myNode { public int id { get; set; } public int floor { get; set; } public double x { get; set; } public double y { get; set; } } 插入节点的当前方法: public static void addNode(GraphClient client, myNode node, string nodeName) { client.Cypher .Create("(" + nodeName + ":Node {node})") .WithParams(new { node }) .ExecuteWit
14 2024-04-20
编程技术问答社区
我可以通过get/post向neo4j浏览器发送一个cypher查询吗?
如何(通过编程)将Cypher查询发送到Neo4J浏览器(通过GET/POST)以显示结果图? 例如,类似:http://localhost:7474/browser/query='match n return n' 解决方案 是的,你可以. 示例请求 POST http://localhost:7474/db/data/cypher Accept: application/json; charset=UTF-8 Content-Type: application/json { "query" : "MATCH (x {name: 'I'})-[r]->(n) RETURN type(r), n.name, n.age", "params" : { } } 示例响应 200: OK Content-Type: application/json; charset=UTF-8 { "columns" : [ "type(r)", "n.name"
22 2024-04-03
编程技术问答社区
使用加密器的BFS遍历
我需要使用BFS穿越有向的无环图(DAG). 我正在通过REST API使用neo4j,所以我使用neo4j的主要方式使用了Cypher. 使用Cypher我可以从启动节点中检索一组所有路径,并从它们中得出BFS遍历. 我想知道是否有一种更简单的方法可以使用Cypher进行BFS遍历.我期望的输出将是一组节点. 解决方案 您不能在长度后订购产生的路径,也许从每个节点中订购最后一个节点,例如start n=node(1) match p = n-[*1..]->m return p, length(p), last(p) order by length(p) asc 以上升顺序恢复路径?
26 2024-04-03
编程技术问答社区
Neo4j cypher查询语言--布尔表达式的操作顺序
我正在尝试编写一个查询来从我的neo4j数据库中获取数据.可以说,有五个条件可以确定我是否要从数据库中拉_____: A && B && (C || D || E) 通过搜寻网络,我找不到有关neo4j和/或询问遵守操作顺序的任何信息(通常是在或之前),但是从我的观察结果中,它们似乎是在顺序执行的.由于我没有办法明确定义顺序,也就是使用括号的顺序,所以一个人将如何实现cypher查询以满足上面的布尔表达式? 解决方案 我不知道可以明确定义顺序,也就是使用括号 不要那么确定. ;) 首先,即使是依次执行的,也有总是的关联或分组.让我们看一个重要的情况. MATCH (n) RETURN CASE WHEN false AND true OR true THEN 'and' ELSE 'or' END (只要数据库中至少有一个节点,这将起作用.) 此必须等于((false and true) or true)或(false and (true o
18 2024-04-01
编程技术问答社区
Neo4j查询执行时间:当多次执行同一查询时,似乎只有第一次是正确的
我正在使用LDBC数据集在Neo4J 4.0.1,sf = 1中测试执行时间,并且我使用Java连接Neo4J,resuctyummary.resultavailablater()获得执行时间,这是获得结果的时候了并开始流媒体. 但是对于同样的查询,当我第一次运行时,执行时间似乎是合理的,就像数百个MS一样,但是当我继续运行相同的查询时,执行时间几乎为0. 我想这是查询缓存的效果,但是是否有适当的方法测试查询执行时间并获得合理的结果? 现在,我只能重新启动数据库,以获得似乎正确的结果. 我想这是因为neo4j直接缓存查询结果,如果多次执行相同的查询,则将其获取.有什么办法避免这种情况吗?即让Neo4J进行正常的缓存(例如节点和关系),而不是直接缓存查询结果. 谢谢! 解决方案 页面缓存很可能是您看到的结果的原因(好吧,我在构建Neo4J群集时与Neo4J工程师进行了一些讨论.他们的建议以优化我们的群集性能的建议似乎表明了这一点).您应该将页面缓存大小设置为0或非常接近0(例
14 2024-03-30
编程技术问答社区
如何从一个顶点得到一个排他性的子图?
我最近不得不从使用Cypher转换为Gremlin,并且我正在尝试转换一个允许用户"删除"一个节点的查询以及将会受到此影响的所有子图节点.它实际上不是删除节点,而只是在受影响的节点中添加一个"删除"标签. 我可以使用: 获得Gremlin中的子图 g.V(nodeId).repeat(__.inE('memberOf').subgraph('subGraph').outV()).cap('subGraph') ,但这没有考虑到子图中的任何节点,这些节点可能会返回最初的"删除"节点,因此不应孤立. 如果您以上图; b是被删除的节点.它的子图将包括D,E,G和H.但是,由于E仍然有返回到A的路线,因此我们不想"删除"它. D,G和H将没有返回A的路线,因此也应被删除. 我的Cypher查询是这样工作的(使用neo4jclient.cypher在C#中): // Find the node to be deleted i.e. B .Match("(b {Id:
12 2024-03-25
编程技术问答社区
计算Neo4j中每个元素的列表值的平均值
要解决的问题是: List: [x1, y1, z1], [x2, y2, z2] ...[xn, yn, zn] 预期输出: [(x1+x2+..+xn)/n, (y1+y2+..yn)/n, (z1+z2+..+z3)/n] ` 当我仅2个列表和大小使用以下语句固定时,我可以执行加法: UNWIND(apoc.coll.zip([1,2,3], [4,5,6])) as output RETURN COLLECT(apoc.coll.avg(output)) 输出是 [2.5, 3.5, 4.5] ,但无法与 n 列表的动态数字保持一致.列表的大小是需要计算AVG的常数. neo4j桌面图:3.5.18 apoc库:3.5.0.12 预先感谢! 解决方案 假设您将" sublists"的列表作为参数,list,这可能对您有用: RETURN [w IN REDUCE(s = [], sublist I
8 2024-03-21
编程技术问答社区
如何使用Neo4jClient返回COLLECT([role, app])?
我有以下我正在努力转化为流利语法的密码: MATCH (u:User)-[:HAS_ROLE]->(r:Role)-[:ROLE_OF]->(a:App) RETURN u AS User, COLLECT([r, a]) AS Roles 这是我到目前为止所拥有的,但是我不知道如何将收藏([r,a])作为角色归还.我正在使用UserDetails类来将结果传递给视图. var results = _graphClient.Cypher .Match("(user:User)-[:HAS_ROLE]->(role:Role)-[:ROLE_OF]->(app:App)") .Return((user,role,app) => new UserDetails { User = user.As(), Roles = ??? }) .OrderBy("user.Username") .Resu
12 2024-03-14
编程技术问答社区
如何在.net core中编写用户定义的函数和neo4j的密码的存储过程查询?
我有这样的查询 call apoc.load.json("url") yield value unwind value.learningPaths as val merge (n:learningPaths {id:val.uid}) Set n.modified = val.last_modofied, n.type = val.type, n.locale = val.locale, n.childrens= val.number_of_children, n.summary = val.summary, n.minutes = val.duration_in_minutes, n.title = val.tit
8 2024-03-12
编程技术问答社区
如何在.net核心API中编写Cypher查询
我有一个像这样的密码查询 MATCH (n: learningPaths) WHERE any(x IN n.modules WHERE x = "any course") RETURN n 如何在.NET Core API中编写此查询以获取结果 以前我有这样的查询 MATCH (n:learningPaths)-[]->(m:modules) WHERE m.id = "any course" RETURN n; 我在下面写入.net core api var result = ( await _graphClient.Cypher .Match(@"(n:learningPaths)-[]->(m:modules)") .Where(m => m.id == "any course") .Return((n)=> n.As())
4 2024-03-12
编程技术问答社区
apoc.coll.zip()的一些奇怪结果
i创建具有名称属性的3个测试节点为" A"," B"," C",并使用 apoc.coll.zip() 将两个列表结合在一起: MATCH (n:test) WITH collect(n.name) as nodes WITH apoc.coll.zip(nodes, range(0, size(nodes))) as pairs RETURN pairs; +--------------------------------+ | pairs | +--------------------------------+ | [["a", 0], ["b", 1], ["c", 2]] | +--------------------------------+ 预期结果.有趣的是,当我通过在RETURN子句中添加另一列或通过UNWIND UNWIND来修改查询时. 1. RETURN pairs,n.name; MA
12 2024-03-07
编程技术问答社区
如何在Cypher中向属性数组推送数值?
我有两个节点user和files具有关系:contains,该关系具有属性id,它是一个数组,表示为 (:user)-[:contains{id:[12345]}]->(:files) 但是,我想使用1111和14567 顺序1111和Cypher使用Cypher查询来填充属性数组id,我找不到将值推入数组的任何方法./p> 将1111插入属性id将是: (:user)-[:contains{id:[12345,1111]}]->(:files) 将14567插入属性id将是: (:user)-[:contains{id:[12345,1111,14567]}]->(:files) 我不知道如何顺序将值填充到属性数组. 解决方案 在数组中添加值类似于递增整数或串联字符串并以相同的方式表示(在您的情况下)(让为[c:contains {id:[12345]}]为[c:contains {id:[12345]}]) ) c.id = c.id
10 2024-03-05
编程技术问答社区
使用neo4j rest http客户端的性能问题
用Apache HTTP客户端替换Neo4J-JDBC客户端后挣扎. 似乎我们只运行执行我们查询的1K并发用户时仍有问题. 这就是我们使用客户端的方式: 这是我们使用该rest-lient执行查询的方式: 分析后,我们看到上述不良性能结果: 每个请求的AVG延迟为3秒. 我们应该抛弃neo4j吗?我们对表演结果感到拼命 谢谢. 解决方案 那么,您想提出更多并发请求吗?让我们探索我们可以在这里做什么. 查询 首先 - 检查查询的性能是否足够好.复制式neo4j浏览器,使用PROFILE预先浏览并探索输出. 可能是您的查询所做的要比您预期的要多得多.由于Neo4J仍在执行查询. ,这导致了很长的等待时间. 客户 httpclient配置 您正在使用PoolingHttpClientConnectionManager. 从文档: poolinghttpclientConnectionManager在每个路
20 2024-02-28
编程技术问答社区
Neo4j快速匹配模糊文本属性的方法
我有合理数量的节点(大约60,000) (:Document {title:"A title"}) 给定标题,如果存在,我想找到匹配的节点.问题是我给出的标题不一致.也就是说,有时新词的开头是资本,有时都是较低的情况.有时,钥匙单词与烤肉串相结合,有时它们通常被写成关键词. 为了补偿这一点,我使用apoc和给定标题和每个节点之间的levenshtein距离,并且如果它低于某个阈值,则仅接受节点作为匹配: MATCH (a:Document) WHERE apoc.text.distance(a.title, "A title")
14 2024-01-23
编程技术问答社区
Neo4j用属性过滤器通过多个关系的定向路径
是Cypher和Neo4J的新手,我很难为用例构建查询.我正在构建一个简单的ACL(访问控制列表),并且正在寻找通过权限关系的路径,也是一个层次结构.图片可以更好地解释: Key: Users -> Blue Groups -> Yellow, Green Resource Tree -> Red 现在,我想看看一条路径是否从bob到 evar 33 资源,其中bob具有 empation 访问.因为有一个直接的路径,所以我可以通过运行 来获得我正在寻找的东西 MATCH p =(usr:Usr)-[:AXO {update: true}]->(aco:ACO) WHERE usr.name = 'Bob' AND aco.name = 'eVar 33' RETURN p 但是,现在,鲍勃还是媒体MGMT 组的成员,它授予他 read 访问 conversion 资源的访问.而且因为转换比 evar 33 , evar 33 更远,应该继承此许
48 2024-01-09
编程技术问答社区
如何对不同的财产权重进行汇总?
我试图获得两个属性总和(重量),并将它们最终组合成组合的重量. 因此,首先是单独的查询,因此您可以看到正确的总和 Language = French,超过6(比例1-10): MATCH (User)-[Speaks]->(Language) WHERE Language.language = 'French' AND Speaks.proficiency >=6 RETURN User.name, SUM( CASE WHEN Language.language='French' THEN Speaks.proficiency*3 END )*0.1 AS TOTAL_Language ORDER BY TOTAL_Language DESC user.name total_language 大卫3 Marion 1.8 Skill = Finance,Banking,IT,Marketing Weight =1 (of 1):
20 2023-12-03
编程技术问答社区
图形数据库的可视化
假设我正在使用neo4j,我能想到的唯一方法是可视化我的模拟数据是生成cypher代码并将其粘贴到neo4j的data browser 中 是否有另一种方法(更好,更简单?)可以使用cypher来创建可视化的方式?生成cypher代码本身似乎是一项足够复杂的任务. 编写测试当然是确保关系正确建立的另一种方式,但是当我学习系统时,我想从视觉上看到这些内容,以确保它们按预期设置. 解决方案 this gist 包含一个示例GraphViz点表示法,由一系列可视化软件支持. (当然, graphviz 本身) (链接到原始博客文章,我找到了一个示例: http://blog.neo4j.org/2012/05/graph-this-rendering-your-graph-with.html ) 其他解决方案 有一个新解决方案可以使用网络浏览器:它允许您通过属性搜索节点,检查节点,展开邻域... Disclamer:我是Linkurious和Gephi的联
36 2023-11-20
编程技术问答社区