Titan db没有在弹性搜索上创建文档甚至索引启用了配置选项

时间:2017-05-31 16:06:00

标签: graph titan

以下是我正在使用的配置选项。

storage.backend=cassandra
storage.hostname=192.168.56.121
storage.cassandra.keyspace=graphs
cache.db-cache = false
cache.db-cache-clean-wait = 20

index.search.backend=elasticsearch
index.search.hostname=192.168.56.122
index.search.elasticsearch.client-only=true
index.search.index-name=graphs

TitanGraph graph = GraphFactory.getInstance().getGraph();
TitanManagement mgmt = null;
try {
    mgmt = graph.openManagement();
    PropertyKey name = mgmt.getPropertyKey(Schema.NAME);
    if (name == null) {
        name = mgmt.makePropertyKey(Schema.NAME).dataType(String.class).make();

    }
    TitanGraphIndex graphIndex = mgmt.getGraphIndex("byName");

if (graphIndex == null) {
    IndexBuilder builder = mgmt.buildIndex("byName", Vertex.class).addKey(name);
    builder.buildCompositeIndex();
}

PropertyKey id = mgmt.getPropertyKey(Schema.ID);
if (id == null) {
    id = mgmt.makePropertyKey(Schema.ID).dataType(Long.class).make();
}

PropertyKey sourceType = mgmt.getPropertyKey(Schema.SOURCE_TYPE);
if (sourceType == null) {
    sourceType = mgmt.makePropertyKey(Schema.SOURCE_TYPE).dataType(String.class).make();
}

TitanGraphIndex uniqueIndex = mgmt.getGraphIndex("uniqueIndex");

if (uniqueIndex == null) {
    IndexBuilder builder = mgmt.buildIndex("uniqueIndex", Vertex.class).addKey(id).addKey(sourceType);
    builder.unique().buildCompositeIndex();
}

// Edges
EdgeLabel deps = mgmt.getEdgeLabel("deps");

if (deps == null) {
    deps = mgmt.makeEdgeLabel("deps").multiplicity(Multiplicity.SIMPLE).make();
}

RelationTypeIndex  depsIndex = mgmt.getRelationIndex(deps, "depsIndex");

if(depsIndex == null) {
    depsIndex = mgmt.buildEdgeIndex(deps, "depsIndex", Direction.BOTH, Order.decr);
}

mgmt.commit();


// Re index the existing data
if (reIndexData) {
    mgmt = graph.openManagement();
    mgmt.updateIndex(mgmt.getGraphIndex("uniqueIndex"), SchemaAction.REINDEX).get();
    mgmt.updateIndex(mgmt.getGraphIndex("byName"), SchemaAction.REINDEX).get();
    deps = mgmt.getEdgeLabel("deps");
    mgmt.updateIndex(mgmt.getRelationIndex(deps,"depsIndex"), SchemaAction.REINDEX).get();
        mgmt.commit();
    }

} catch (Throwable e) {
    log.error(e.getMessage(), e);
    if (mgmt != null) {
        mgmt.rollback();
    }
}

我已经创建了很多文档,而且每件事都运行良好。但是当我观察到弹性搜索中可用的数字文件是0时。

我想知道titan db是否真的使用了弹性搜索。

知道我在这里缺少什么吗?为什么不在弹性搜索中创建文档。

我也试过了下面的配置,但没有运气

storage.backend=cassandra
storage.hostname=192.168.56.121
storage.cassandra.keyspace=graphs
cache.db-cache = false
cache.db-cache-clean-wait = 20

index.graphs.backend=elasticsearch
index.graphs.hostname=192.168.56.122
index.graphs.elasticsearch.client-only=true
index.graphs.index-name=graphs

1 个答案:

答案 0 :(得分:2)

Titan使用存储后端(cassandra / hbase)进行综合指数和索引后端(Solr /弹性搜索)进行混合指数

  

混合索引通过以前添加的属性键的任意组合检索顶点或边。混合索引比复合索引提供更多灵活性,并支持超出相等性的其他条件谓词。另一方面,对于大多数相等查询,混合索引比复合索引慢。

     

与复合索引不同,混合索引需要配置索引后端,并使用该索引后端执行查找操作。 Titan可以在单个安装中支持多个索引后端。每个索引后端必须在Titan配置中按名称唯一标识,称为索引后端名称。

在您的架构中,您只创建复合索引。这就是ElasticSearch中没有数据的原因。

以下是如何创建混合索引的示例:

IndexBuilder builder = mgmt.buildIndex('byName', Vertex.class).addKey(name);
builder.buildMixedIndex("search");
mgmt.commit();

Read More

来源:http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html