学习Gremlin - 27. Gremlin Java API

27. Gremlin Java API

27.1、Maven配置

在Maven的pom.xml配置文件中增加如下引用:

<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-core</artifactId>
    <version>0.4.0</version>
</dependency>
<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-cql</artifactId>
    <version>0.4.0</version>
</dependency>
<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-es</artifactId>
    <version>0.4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.4.1</version>
</dependency>

27.2、配置JanusGraph配置文件janusgraph-cql-es.properties

janusgraph-cql-es.properties文件配置示例如下:

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=192.156.193.222
storage.cql.keyspace=janusgraphdev
index.search.backend=elasticsearch
index.search.hostname=192.156.193.222

27.3、创建Spring Bean文件JanusgraphBean.java

JanusgraphBean.java内容如下:

import com.esint.api.utils.PropertiesUtil;
import org.janusgraph.core.JanusGraph;
import org.janusgraph.core.JanusGraphFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JanusgraphBean {

    private String confFile = PropertiesUtil.getPropValue("janusgraph.conf.file");

    public @Bean
    JanusGraph client(){
        return JanusGraphFactory.open(confFile);
    }
}

27.4、一些Java使用JanusGraph的示例

27.4.1、查询节点的周边的边与节点
/**
* 根据身份证号找到节点并且查询该节点的周边节点.
*/
@Test
public void queryVertexByIdCardTest() throws Exception {
    JanusGraph graph = JanusgraphBean.getJanusGraph();
    JanusGraphTransaction transaction = graph.newTransaction();
    GraphTraversalSource g = transaction.traversal();

    GraphTraversal<Vertex, Path> traversal = g.V()
        .has("personId", "120221198209293016")
        .outE().inV().path()
        .by(__.valueMap().with(WithOptions.tokens))
        .by(__.valueMap().with(WithOptions.tokens));

    while (traversal.hasNext()) {
        Path thisobj = traversal.next();
        // 分别截取图库查询返回结果中的三部分,左节点、边、右节点
        Map<String, List> lv = thisobj.get(0);
        Map<String, List> relation = thisobj.get(1);
        Map<String, List> rv = thisobj.get(2);
        System.out.println(JSON.toJSONString(lv));
        System.out.println(JSON.toJSONString(relation));
        System.out.println(JSON.toJSONString(rv));
    }

    //关闭查询
    g.close();
    //关闭查询事务
    transaction.close();
}
27.4.2、查询节点
/**
* 如果节点不存在则创建节点并返回
* @param graph JanusGraph实例对象
* @param key   节点key
* @param value 节点value
* @return 节点
*/
public static Vertex getVertex(String key, String value) {
    JanusGraph graph = JanusgraphBean.getJanusGraph();
    JanusGraphTransaction transaction = graph.newTransaction();
    GraphTraversalSource g = transaction.traversal();

    Vertex v;
    GraphTraversal<?, Vertex> graphTraversal = graph.traversal().V().has(key, value);
    if (graphTraversal.hasNext()) {
        v = graphTraversal.next();
    } else {
        v = graph.addVertex("person");
        v.property(key, value);
    }
    return v;
}
27.4.2、查询边
/**
* 获得边
* @param key 边的key
* @param value 边的value
* @return 边
*/
public static Edge GetEdge(String key, String value){
    JanusGraph graph = JanusgraphBean.getJanusGraph();
    JanusGraphTransaction transaction = graph.newTransaction();
    GraphTraversalSource g = transaction.traversal();
    
    Edge e = null;
    GraphTraversal<?, Edge> graphTraversal = graph.traversal().E().has(key, value);
    if (graphTraversal.hasNext()){
        e = graphTraversal.next();
    }
    return e;
}
27.4.3、判断边是否存在
/**
* 判断边是否存在
* @param key 边的key
* @param value 边的value
* @return 是否存在 true:存在 false:不存在
*/
public static boolean edgeIsExist(String key, String value) {
    JanusGraph graph = JanusgraphBean.getJanusGraph();
    JanusGraphTransaction transaction = graph.newTransaction();
    GraphTraversalSource g = transaction.traversal();
    
    boolean exist = false;
    GraphTraversal<?, Edge> graphTraversal = graph.traversal().E().has(key, value);
    if (graphTraversal.hasNext()) {
        exist = true;
    }
    return exist;
}
27.4.4、删除节点
/**
* 删除节点
* @param graph JanusGraph实例对象
* @param key 节点的key
* @param value 节点的value
*/
public static void deleteVertex(JanusGraph graph,String key, String value){
    GraphTraversal<Vertex, Vertex> traversal = graph.traversal().V()
        .has(key, value);

    if(traversal.hasNext()){
        Vertex thisobj = traversal.next();
        thisobj.remove();
    }
}
27.4.5、删除边
/**
* 删除边
* @param graph JanusGraph实例对象
* @param key 边的key
* @param value 边的value
*/
public static void deleteEdge(JanusGraph graph,String key, String value){
    GraphTraversal<Edge, Edge> traversal = graph.traversal().E()
        .has(key, value);

    if(traversal.hasNext()){
        Edge thisobj = traversal.next();
        thisobj.remove();
    }
}
27.4.6、获得节点双向链接所有边的数量
/**
     * 获得节点双向链接所有边的数量
     * @param graph JanusGraph实例对象
     * @param key 节点的key
     * @param value 节点的value
     * @return 边的数量
     */
public static long getVertexBothEgdeCount(JanusGraph graph,String key, String value){
    long number = 0L;
    GraphTraversal<Vertex, Long> traversal = graph.traversal().V()
        .has(key, value)
        .bothE().count();
    if (traversal.hasNext()) {
        number = traversal.next();
    }
    return number;
}
27.4.7、获得节点in方向所有边的数量
/**
     * 获得节点in方向所有边的数量
     * @param graph JanusGraph实例对象
     * @param key 节点的key
     * @param value 节点的value
     * @return 节点的数量
     */
public static long getVertexInEgdeCount(JanusGraph graph,String key, String value){
    long number = 0L;
    GraphTraversal<Vertex, Long> traversal = graph.traversal().V()
        .has(key, value)
        .inE().count();
    if (traversal.hasNext()) {
        number = traversal.next();
    }
    return number;
}
27.4.8、获得节点Out方向所有边的数量
/**
     * 获得节点Out方向所有边的数量
     * @param graph JanusGraph实例对象
     * @param key 节点的key
     * @param value 节点的value
     * @return 节点的数量
     */
public static long getVertexOutEgdeCount(JanusGraph graph,String key, String value){
    long number = 0L;
    GraphTraversal<Vertex, Long> traversal = graph.traversal().V()
        .has(key, value)
        .outE().count();
    if (traversal.hasNext()) {
        number = traversal.next();
    }
    return number;
}
27.4.9、根据边的属性获得节点信息
/**
     * 根据边的属性获得节点信息
     * @param graph JanusGraph实例对象
     * @param ikey 边的index
     * @param value 边的value
     * @return 节点集合
     */
public static List<Vertex> getVertexByEgdeProperty(JanusGraph graph,String ikey, String value){
    List<Vertex> vertexList = graph.traversal().E()
        .has(ikey, value)
        .bothV()
        .dedup()
        .toList();

    return vertexList;
}
27.4.10、根据边的属性获得边左侧的节点
/**
     * 根据边的属性获得边左侧的节点.
     * @param graph JanusGraph实例对象
     * @param ikey 边的index
     * @param value 边的value
     * @return 边的左侧节点
     */
public static Vertex getLeftVertexByEdge(JanusGraph graph, String ikey, String value){
    GraphTraversal<Edge, Vertex> traversal = graph.traversal().E()
        .has(ikey, value)
        .outV();
    Vertex v = null;
    if (traversal.hasNext()){
        v = traversal.next();
    }
    return v;
}
27.4.11、根据边的属性获得右侧的节点
/**
     * 根据边的属性获得右侧的节点
     * @param graph JanusGraph实例对象
     * @param ikey 边的index
     * @param value 边的value
     * @return 边的右侧节点
     */
public static Vertex getRightVertexByEdge(JanusGraph graph, String ikey, String value){
    GraphTraversal<Edge, Vertex> traversal = graph.traversal().E()
        .has(ikey, value)
        .inV();
    Vertex v = null;
    if (traversal.hasNext()){
        v = traversal.next();
    }
    return v;
}
27.4.12、获得节点属性的值
/**
     * 获得节点属性的值.
     * @param vmap 节点的属性结合对象
     * @param key 节点的key
     * @return 值
     */
public static String getVertexPropertie(Map<String, List> vmap, String key) {
    String value = "";
    if(vmap == null) {
        return value;
    }
    //是否包含key值
    if(vmap.containsKey(key)){
        List list = vmap.get(key);
        if(list.size() > 0){
            value = list.get(0).toString();
        }
    }
    return value;
}
27.4.13、获得节点属性的值-多态1
/**
     * 获得节点属性的值.
     * @param vmap 节点的属性结合对象
     * @param key 节点的key
     * @param defaultStr 默认值
     * @return 值
     */
public static String getVertexPropertie(Map<String, List> vmap, String key,String defaultStr) {
    String value = defaultStr;
    if(vmap == null){
        return value;
    }
    //是否包含key值
    if(vmap.containsKey(key)){
        List list = vmap.get(key);
        if(list.size() > 0){
            Object obj = list.get(0);
            if(obj instanceof Date){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date date = (Date)obj;
                if(date.getTime() != DateUtil.getMinDate().getTime()){
                    value = sdf.format(date);
                }
            }else if(!"".equals(obj)){
                value = obj.toString();
            }
        }
    }
    return value;
}
27.4.14、获得节点属性的值-多态2
/**
     * 获得节点属性的值.
     * @param vmap 节点的属性结合对象
     * @param key 节点的key
     * @return 值
     */
public static String getVertexPropertieObject(Map<Object, List> vmap, String key) {
    String value = "";
    if(vmap == null){
        return value;
    }
    //是否包含key值
    if(vmap.containsKey(key)){
        List list = vmap.get(key);
        if(list.size() > 0){
            value = list.get(0).toString();
        }
    }
    return value;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值