使用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给定的县。
我很感激任何答案和指示,以帮助我。
编辑: 经过大量的搜索,我认为我想要实现的是“聚类分析”,但是我无法弄清楚如何创建聚类(我上面称之为群组),因此分析还有一步之遥。也许这个术语有助于澄清我所追求的目标。
答案 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来找到我想要的结果 -