2017-05-31 43 views
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.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是否真的使用彈性搜索。

任何想法我在這裏失蹤?以及爲什麼文檔不能在彈性搜索中創建。

,我也試過belown配置很好,但沒有運氣

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 

回答

2

泰坦使用存儲後端(卡桑德拉/ 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

+0

非常感謝給輸入反應快。而且我對混合指數也有疑問。 –

+0

我的數據檢索通常以ID和SOURCETYPE唯一標識的頂點開始。我已經創建了uniquekey以及與這兩個屬性結合的組合鍵。是否足夠或我需要做出任何更改以使其響應更快 –

+0

如果您想通過ID和sourceType獲取頂點就足夠了。但是,如果你想只通過sourceType得到頂點,那麼效率會很低。您必須根據您的查詢創建索引。 –