gpt4 book ai didi

java - 使用 cypher 获取带有标签和索引的节点

转载 作者:行者123 更新时间:2023-12-01 12:39:26 25 4
gpt4 key购买 nike

我想使用 cypher 查询使用标签和索引来获取节点及其信息,但我仍然在 CypherQuery() 方法中的变量“结果”中得到空值。

NewCypherQuery.java(bean)

public class NewCypherQuery {
private static final String DB_PATH = "/var/lib/neo4j/data/";
private static String resultString;
private static String columnsString, nodeResult, rows = "", query;
private static ExecutionResult result;
private static ExecutionEngine engine;
private static GraphDatabaseService db;
private static Node amad = null, pari = null, sona = null;
private static Relationship rel;
private static IndexDefinition inxamd, inxpri;
private static Label amd,pri;

public static void callAllMethods() {
clearDbPath();
setUp();
createNodes();
CypherQuery();

}

public static void CypherQuery() {
try (Transaction ignored = db.beginTx();) {
result = engine.execute("MATCH (m:inxamd)-->(n:inxpri) USING INDEX m:inxamd(name) USING INDEX n:inxpri(name) WHERE m.name = 'Amad' AND n.name= 'Pari' RETURN m");
for (Map<String, Object> row : result) {
resultString = engine.execute("MATCH (m:inxamd)-->(n:inxpri) USING INDEX m:inxamd(name) USING INDEX n:inxpri(name) WHERE m.name = 'Amad' AND n.name= 'Pari' RETURN m").dumpToString();
System.out.println(resultString);
}

} catch (Exception e) {
e.printStackTrace();
}
}
private static void setUp() {
try {
db = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

try (Transaction tx = db.beginTx()) {
engine = new ExecutionEngine(db);
Schema schema = db.schema();
inxamd = schema.indexFor(amd).on("name").create();
inxpri = schema.indexFor(pri).on("name").create();
tx.success();
}
} catch (Exception e) {
e.printStackTrace();
}
}

private static void createNodes() {
try (Transaction tx = db.beginTx();) {

amad = db.createNode();
amad.setProperty("name", "Amad");
amad.setProperty("age", 24);
amad.setProperty("edu", "mscit");

pari = db.createNode();
pari.setProperty("name", "Pari");
pari.setProperty("age", 20);
pari.setProperty("edu", "mscit");

sona = db.createNode();
sona.setProperty("name", "Sona");
sona.setProperty("age", 21);
sona.setProperty("edu", "mscit");

rel = amad.createRelationshipTo(pari, RelTypes.KNOWS);
rel.setProperty("rel", "friend");
rel = pari.createRelationshipTo(sona, RelTypes.KNOWS);
rel.setProperty("rel", "friend");
System.out.println("Nodes created.....");
tx.success();
} catch (Exception e) {
e.printStackTrace();
}
}

private static void clearDbPath() {
try {
deleteRecursively(new File(DB_PATH));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

InsertNodes.java(Servlet):-

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
// TODO Auto-generated method stub
NewCypherQuery ncq=new NewCypherQuery();
ncq.callAllMethods();
}

index.jsp

<form method="post" action="InsertNodes">
<input type="text" name="txtname" value="Hello World !!!!!"></input>
<input type="submit" value="Neo4j World"></input>
</form>

最佳答案

您还没有真正定义 amd (inxamd) 和 pri (inxpri) 这两个标签的值,也没有将它们分配给创建的任何节点。

您可以实现 Label 类并为标签分配名称(例如“inxamd”)或使用 DynamicLabel 。然后,使用

将标签分配给您的节点
amad.addLabel(thelabel);

与上面的问题无关,标签名称通常是一个描述性字符串,指示节点属于哪个集合,例如人、狗在大多数情况下,您不需要显式提供索引提示 ( USING INDEX )

关于java - 使用 cypher 获取带有标签和索引的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com