具有多个属性的单个混合索引或每个属性具有单个属性的多个混合索引



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

  1. 我应该选择拥有多个具有单个属性的混合指数,还是具有多个属性的单个混合指数?

    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")

如果我必须选择具有多个属性的单点混合索引 那么它可以跨越边和顶点上的属性还是在那里 有什么准则吗?

  1. 在顶点/边之间共享属性是否更好?这意味着我想拥有属性"onDate",并将其用于边缘"注册","结婚","同意条款"和顶点"订单","旅行"。

如果该物业需要,是否有任何特殊考虑 有索引吗?

看看文档是怎么说的

混合索引通过以前添加的属性键的任意组合来检索顶点或边。

现在对于你的第一个问题,

  • 如果您的目标是使用单个索引来查询一个属性中的任何/所有属性,请仅使用一个混合索引。假设你想拥有一首单曲

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 个属性,依此类推。

  • 如果您的目标是仅查询一个属性,请使用复合索引。它要快得多。

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

对于你的第二个问题,

不能在索引和边缘之间共享相同的属性值。但是,您可以在所有这些属性中具有相同的属性名称。如果要查询单个属性,请以复合索引为目标。

总之

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

有关此内容的更多信息,请阅读此处的文档,了解 Titan 1.0.0 中的索引。

最新更新