基于属性计算的组节点

时间:2017-03-09 15:37:50

标签: neo4j cypher

使用Neo4j / Cypher,我有一个非常小的数据集(290个节点),只包含一种类型的标签(:郡)。

他们的属性如下所示:县({countyCode,countyName,population})。 有一个索引:County.countyCode

每个:县与1 + N其他相关:按关系县:ADJACENT_TO。

我想要实现的是找到符合人口属性给定值的县的组合(例如最小100000,最大120000)。

通过下面的查询,我已经找到了对,但不是三个或更多县的组合。

MATCH x = (a:County)-[:ADJACENT_TO]->(b:County)
WHERE reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) >= 100000 
AND reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) <= 120000
RETURN x, b.countyName, a.countyName, 
reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) AS reduction

最终目标是找到符合给定标准的1 ... N个县的独特组合,即:县(x)与:县(y)和:县(z)相结合,但不包括:县(w)可能与:县(v)有不同的组合。

在“核心”县不直接组合的情况下,没有县可以存在:ADJACENT_TO给定的县。

我很感激任何答案和指示,以帮助我。

编辑: 经过大量的搜索,我认为我想要实现的是“聚类分析”,但是我无法弄清楚如何创建聚类(我上面称之为群组),因此分析还有一步之遥。也许这个术语有助于澄清我所追求的目标。

1 个答案:

答案 0 :(得分:0)

我采用的解决方案是密码查询和PHP代码的组合。

我开始获取:County - 节点之间的所有关系,并在PHP中运行数组置换以获得可能的变化。

根据这些变体,我创建了:Cluster - 与:Contains :Counties :Cluster关系:Cluster的节点。

然后我根据群组组合中的人口给每个:Cluster一个排名。

然后,我迭代:County选择排名最高且未按照之前的标记,删除所有其他:Cluster.controller('salesCtrl', ['$scope', '$stateParams','$cordovaSQLite', // The following is the constructor function for this page's controller. See https://docs.angularjs.org/guide/controller // You can include any angular dependencies as parameters for this function // TIP: Access Route Parameters for your page via $stateParams.parameterName function ($scope, $stateParams,$cordovaSQLite) { var db=null; if (window.cordova) { db = $cordovaSQLite.openDB({ name: "pos.db" }); //device console.log("not in browser"); }else{ db = window.openDatabase("pos.db", '1', 'my', 1024 * 1024 * 100); // browser console.log("browser"); } $cordovaSQLite.execute(db,"CREATE TABLE IF NOT EXISTS items(id integer primary key AUTOINCREMENT,firstname text NOT NULL,lastname text NOT NULL)"); $scope.insert=function(){ var query="INSERT into items(firstname,lastname) VALUES(?,?)"; $cordovaSQLite.execute(db,query,["name1","name2"]).then(function(result){ console.log(result.rows); },function(error){ console.log(error); }) } }]) 与高级别insert()相关联。

所以,总结一下 - 我没有找到一种方法来查询Neo4j和cypher来找到我想要的结果 -

相关问题