Titan java读数据的相关api使用 (初学)

原创 2016年06月01日 21:55:47

http://s3.thinkaurelius.com/docs/titan/1.0.0/index.html   titan官方文档链接.

我用的是hbase+es结构.所以先下载hbase.然后下载titan的gremlin终端方便查看数据测试用.titan的需要java1.8以上的配置,这里要注意.

本地java api使用的例子网上太少了= =这里写一些以备以后使用.

首先需要引pom.


<properties>
        <titan.version>1.0.0</titan.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-core</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-hbase</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-es</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-hadoop</artifactId>
            <version>${titan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tinkerpop</groupId>
            <artifactId>gremlin-driver</artifactId>
            <version>3.0.1-incubating</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>0.98.2-hadoop1</version>
        </dependency>
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-berkeleyje</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

titan自带一个学习测试的例子.和titan文档中的神的故事的例子基本保持一致.类名GraphOfTheGodsFactory

在运行下面程序之前需要先打开本地的hbase

package com.yuchen;

import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.thinkaurelius.titan.core.attribute.Contain;
import com.thinkaurelius.titan.core.attribute.Geoshape;
import com.thinkaurelius.titan.core.attribute.Text;
import com.thinkaurelius.titan.example.GraphOfTheGodsFactory;
import org.apache.tinkerpop.gremlin.process.traversal.Contains;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;

import java.io.File;
import java.util.Iterator;
import java.util.Map;

/**
 * Copyright (c) 2016 Qunar.com. All Rights Reserved
 *
 * @author yuchenwu
 * @date 16-5-30.
 */

public class TestGetTitan {
    public static final String INDEX_NAME = "search";

    public static void main(String[] args) {
        TitanFactory.Builder config = TitanFactory.build();
        config.set("storage.backend", "hbase");
        config.set("storage.hostname", "localhost");
        config.set("index." + INDEX_NAME + ".backend", "elasticsearch");
        //这里的这个/tmp/titan 是本地的路径,需要先创建文件夹
        config.set("index." + INDEX_NAME + ".directory", "/tmp/titan" + File.separator + "es");
        config.set("index." + INDEX_NAME + ".elasticsearch.local-mode", true);
        config.set("index." + INDEX_NAME + ".elasticsearch.client-only", false);
        TitanGraph graph = config.open();

        GraphTraversalSource g = graph.traversal();
//       第一次需要先load这个  将数据导入到本地的hbase中
//       下面的例子可以结合刚才文档中chapter 3 中的例子看
//        GraphOfTheGodsFactory.load(g);
        //对应gremlin内的 g.V().has('name','hercules').next().value('name')
        System.out.println("======" + g.V().has("name", "hercules").next().value("name"));
        //g.V().has('name','hercules').next().values('name','age')
        System.out.println("======" + g.V().has("name", "hercules").next().values("name", "age"));
        Iterator iterator = g.V().has("name","hercules").next().values("name", "age");
        while(iterator.hasNext()){
            Object o  = iterator.next();
            System.out.println("======"+o);
        }

         Vertex saturn = g.V().has("name","saturn").next();

        System.out.println("======"+saturn);

        //g.V(vertex).in("father").in("father").next()  得到 saturn的孙子节点
        System.out.println("======" + g.V(saturn).in("father").in("father").next().value("age"));

        GraphTraversal<Edge, Edge> a =  g.E().has("place", P.eq(Geoshape.point(38.1f, 23.7f)));
        System.out.println("======"+a);
        while(a.hasNext()){
            Edge e = a.next();
            System.out.println("======"+e.keys());
            System.out.println("======"+e.label());
            System.out.println("======"+e.outVertex().value("name"));
            System.out.println("======"+e.inVertex().value("name"));
            System.out.println("======"+e.value("time")+"  :  "+e.value("place"));
        }

        Vertex hercules = g.V().has("name","hercules").next();
        System.out.println("======"+g.V(hercules).out("mother","father").values("name"));
        GraphTraversal<Vertex,Vertex> mF = g.V(hercules).out("mother", "father");
        while(mF.hasNext()){
            Vertex v = mF.next();
            System.out.println("======"+ v.label()+"  :  "+v.value("name"));
        }

        System.out.println("======" + g.V(saturn).repeat(__.in("father")).times(2).next().value("name"));

        GraphTraversal<Vertex,Vertex> monsters = g.V(hercules).out("battled");
        while(monsters.hasNext()){
            Vertex monster = monsters.next();
            System.out.println("======"+monster.label()+"  :  "+monster.value("name"));
        }

        monsters = g.V(hercules).outE("battled").has("time",P.eq(1)).inV();
        while(monsters.hasNext()){
            Vertex monster = monsters.next();
            System.out.println("======"+monster.label()+"  :  "+monster.value("name"));
        }
        Vertex pluto = g.V().has("name","pluto").next();
        //通过out得到住的地方的节点,在in得到所有链接到这个地方的节点,从而得到所有住在这个地方的节点  out 边出去的条件  in  边进来的条件

        GraphTraversal<Vertex,Vertex> liveInTartarusVertex = g.V(pluto).out("lives").in("lives");
        while(liveInTartarusVertex.hasNext()){
            Vertex vertex = liveInTartarusVertex.next();
            System.out.println("======"+vertex.value("name"));
        }



        GraphTraversal<Vertex,Vertex> liveInTartarusVertexNo = g.V(pluto).out("lives").in("lives").where(
                __.is(P.neq(pluto)));
        while(liveInTartarusVertexNo.hasNext()){
            Vertex vertex = liveInTartarusVertexNo.next();
            System.out.println("======"+vertex.value("name"));
        }


        GraphTraversal<Vertex,Vertex> liveInTartarusVertexNot = g.V(pluto).as("x").out("lives").in("lives").where(P.neq(
                "x"));
        while(liveInTartarusVertexNot.hasNext()){
            Vertex vertex = liveInTartarusVertexNot.next();
            System.out.println("======"+vertex.value("name"));
        }

        GraphTraversal<Vertex,Map<String, Vertex>> brothers = g.V(pluto).out("brother").as("god").out("lives").as("place").select("god","place");
        while(brothers.hasNext()){
            Map<String,Vertex> map = brothers.next();
            System.out.println("======"+map);
            for(Map.Entry<String,Vertex> entry:map.entrySet()){
                System.out.println(entry.getKey()+" : "+entry.getValue().value("name"));
            }
        }

        System.out.println("======"+g.V(pluto).outE("lives").next().value("reason"));


        /*GraphTraversal<Edge,Object> reasons = g.E().has("reason").values("reason").is(Text.textContains("loves"));
        System.out.println(reasons);
        while(reasons.hasNext()){
            Object e = reasons.next();
            System.out.println("======"+e);

        }*/

        GraphTraversal<Edge,Edge> reasons = g.E().has("reason").as("r").values("reason").is(Text.textContains("loves")).select("r");
        System.out.println(reasons);
        while(reasons.hasNext()){
            Edge e = reasons.next();
            System.out.println("======"+e.keys());
            System.out.println("======"+e.label());
            System.out.println("======"+e.value("reason"));
        }

        GraphTraversal<Edge,Map<String,Object>> reasons2 = g.E().has("reason").as("source").values("reason").is(Text.textContains("loves")).as("reason").select("source")
                .outV().values("name").as("god").select("source").inV().values("name").as("thing").select("god","reason","thing");

        while(reasons2.hasNext()){
            Map<String,Object> map = reasons2.next();
            System.out.println("======"+map);
            for(Map.Entry<String,Object> entry:map.entrySet()){
                System.out.println(entry.getKey()+" :  "+entry.getValue());
            }
        }
//        System.out.println("======"+);

//        System.out.println("======"+g.V(pluto).out("lives").in("lives"));
        graph.close();
    }
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Titan Graph DataBase 研究 (二)----Titan Server 发布

上一篇讲到如何搭建titan,那么今天就来说说如何进行Titan Server的发布,以及如何插入数据 由于上篇讲的是如何搭建基于hbase-solr的titan graph database,那么...

Titan Graph DataBase 研究 (一)----环境搭建

最近有个与腾讯朋友里二度人脉相关的需求,发觉Titan貌似可以解决这种人际关系相关的数据存储查找并且还支持 - 弹性和线性可伸缩性的增长数据和用户群。 - 数据分布和复制和容错性能。 - 多数据...

Titan学习笔记-初识

Titan 是一个在服务器集群搭建的分布式的图形数据库,特别为存储和处理大规模图形而优化。集群很容易扩展以支持更大的数据集,Titan有一个很好的插件式性能,这个性能让它搭建在一些成熟的数据库技术上像...

Java操作图数据库Titan

大数据 05月 19, 2015 阅读(2,844) 评论(0) 目录[-] 1 · Titan简介2 · Java项目搭建3 · 代码实现 Titan简介 Titan 是一个...

Titan Graph DataBase 研究 (三)----Java API使用 上

上一篇说道了如何TitanServer的发布,那么这一章就来说说如何用JavaApI操作Titan,话不多说直接上代码 pom.xml<project xmlns="http://maven.apa...

图数据库titan 和 rexster安装手册

图数据库titan 和 rexster安装手册 titan是图数据库, rexster是图显示服务 titan 安装 下载 titan 0.3.2 解压 titan-all-0.3.2.zip ...

Elasticsearch+Hbase实现海量数据秒回查询

首先祝大家2017新年快乐,我今天分享的是通过ElasticSearch与hbase进行整合的一个搜索案例,这个案例涉及的技术面比较广,首先你得有JAVAEE的基础,要会SSM,而且还要会大数据中的h...

图数据库Titan/Gremlin查询过程分析

本文对Titan/Gremlin的查询过程进行分析,为了简化明了,直接使用例子说明。 查询g.v(1).out.has(name, "David"),当前titan的做法是:       v(...

图数据库Titan的使用总结

1.搭建环境(hbase+es+titan1hadoop1为例) 下载安装 下载安装titan-1.0-hadoop1http://s3.thinkaurelius.com/downloads/t...

HBase数据模型解析和基本的表设计分析

最近在学习HBase的使用,并仔细阅读了一篇官方推荐的博客,在这里就以一边翻译一边总结的方式和大家一起梳理一下HBase的数据模型和基本的表设计思路。 官方推荐的博客原文地址:http://0b4af...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)