如何使用Cypher返回节点的所有属性及其名称和值

时间:2014-10-09 08:49:22

标签: java neo4j cypher

我在这里看到:How can I return all properties for a node using Cypher?有人已经问过这个问题,但是1年前。

所以我现在需要问一下:今天有没有办法使用cypher返回节点的所有属性?我需要为翻译系统做到这一点,以前的开发人员已将其创建为每种语言1个节点,并包含所有属性及其所需语言的属性。我需要为Java应用程序获取它。

示例:

node FR contains: "Salut_01" : "Bonjour"
node UK contains: "Salut_01" : "Hello"

等...

2 个答案:

答案 0 :(得分:0)

如果您通过http端点直接从cypher返回节点,它将返回一个包含所有property-names和property-values的映射。

 MATCH (n) return n

在Java中,您只需查看n.getPropertyKeys()

对于正则表达式问题,您应该将问题分成两部分。

答案 1 :(得分:0)

这就是我最终的表现:

private IndexedContainer getTradParameters(int id){
        IndexedContainer container = new IndexedContainer();
        container.addContainerProperty("name", String.class, null);
        try {
            Document doc = Jsoup.connect("http://10.0.0.1:7474/db/data/node/"+id+"/").get();
            Elements properties = doc.select("th");
            for(int index = 0; index < properties.size(); index++){
                String parameter = properties.get(index).text();
                Item item = container.addItem(index);
                item.getItemProperty("name").setValue(parameter);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }   
        return container;
    }

由此返回id参数:

match (t:Translation) return id(t)

我用我的请求的每个迭代器调用getTradParameters(),然后我有一个容器,其中包含我的节点的所有参数的名称。

最后一部分是调用此函数:

private String getTradRequest(String pays){
        String request = "match (n:Translation{trad_country:\""+pays+"\"}) return id(n) as id";
        QueryResult <Map<String,Object>>result = engine.query(request, Collections.EMPTY_MAP);
        Iterator<Map<String, Object>> iterator=result.iterator();
        Map<String,Object> row = iterator.next();
        int id = Integer.valueOf(row.get("id").toString());
        try {
            Document doc = Jsoup.connect("http://10.0.0.1:7474/db/data/node/"+id+"/").get();
            Elements properties = doc.select("th");
            for(int index = 0; index < properties.size(); index++){
                String parameter = properties.get(index).text();
                request = request + ",n."+parameter;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return request;
    }

创建我的大Cypher请求以获取我的节点上所需的所有属性,然后我只需要获取答案并将它们存储在容器中,使用vaadin将其显示在表中。