具有多个属性的单个 MixedIndex 或每个具有单个 属性 的多个 MixedIndex?

Single MixedIndex with multiple properties OR multiple MixedIndexes with single property each?

我正在使用 Titan 1.0.0,Cassandra 作为存储后端,elasticsearch 作为索引后端,想要对具有多个顶点和边的复杂图形进行建模。我有以下注意事项:

  1. 我应该选择多个 MixedIndexes 与单个 属性 还是单个 MixedIndex 与多个属性?

    mgmt.buildIndex('nameAndAge',Vertex.class).addKey(name,Mapping.TEXT.getParameter()).addKey(age,Mapping.TEXT.getParameter()).buildMixedIndex("search")
    

mgmt.buildIndex('nameMixed',Vertex.class).addKey(name,Mapping.TEXT.getParameter()).buildMixedIndex("search")
mgmt.buildIndex('ageMixed',Vertex.class).addKey(age,Mapping.TEXT.getParameter()).buildMixedIndex("search")

if I've to chose singel Mixed index with multiple properties then can it span across properties on edges and vertices OR is there any guideline?

  1. 在顶点/边之间共享属性是否更好? 意思是我想要 属性 "onDate" 并将其用于边 "Registered"、"MarriedTo"、"AgreedToTerms" 和顶点 "Order"、"Travel" .

Shall there be any special considerations if that property need to have index?

看看这里的文档是怎么说的

Mixed indexes retrieve vertices or edges by any combination of previously added property keys.

现在回答你的第一个问题,

  • 如果您的目标是使用单一索引同时查询 any/all 个属性,请仅使用一个混合索引。说你想拥有一首单曲

例子

String query="v.*:Phani"; // searches any property in the index with a value that includes `Phani`
Iterable<TitanIndexQuery.Result<TitanVertex>> result = titanGraph.indexQuery("name_mixed_index", query).vertices();

这将搜索您创建的混合索引的所有属性。如果您添加了 10 个属性添加到此索引,它将搜索 10 等等。

  • 如果你的目标是只查询一个属性那么使用复合索引。快多了。

我的建议是,对所有感兴趣的属性使用一个单一的混合索引,这样您就可以一次查询所有属性或使用您喜欢的任意组合查询它们。如果要单索引,就用复合索引。

对于你的第二个问题,

您不能跨索引和边缘共享相同的 属性 值。但是你可以在所有这些中使用相同的 属性 名称。如果您打算查询单个 属性,请瞄准复合索引。

简而言之,

有兴趣进行包含多个值或涉及排序的查询吗?使用具有多个属性的混合索引。 # 有兴趣只查询一个 属性,使用复合索引。

有关此的更多信息,请阅读文档 here for Indexing in Titan 1.0.0