代码之家  ›  专栏  ›  技术社区  ›  Phani

具有多个属性的单个MixedIndex还是具有单个属性的多个MixedIndex?

  •  1
  • Phani  · 技术社区  · 10 年前

    我使用的是Titan 1.0.0,Cassandra作为存储后端,elasticsearch作为索引后端,我想用多个顶点和边来建模一个复杂的图。我有以下考虑:

    1. 我应该选择有多个具有单个属性的MixedIndex,还是选择一个具有多个属性的MixdIndex?

      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”,并将其用于边“Registered”、“MarriedTo”、“AgreedToTerms”和顶点“Order”、“Travel”。

    如果该物业需要 有索引吗?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Mohamed Taher Alrefaie    10 年前

    看看这里的文档说明

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

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

    • 如果您的目标是使用单个索引一次查询任何/所有属性,请只使用一个混合索引。说你想要一张单人床

    实例

    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 .