泰坦 - has()与混合索引的奇怪行为

时间:2016-05-12 10:45:40

标签: amazon-dynamodb titan gremlin tinkerpop3

我有一个带有ES后端的Titan图和用于持久性的DynamoDB。

方法has("mykey", "value")永远不会检索顶点。查询由Elasticsearch索引的mykey时,它始终不返回任何内容。索引已更新并启用。

运行此查询时,

gremlin>  graph.indexQuery("verticesIndex2", "v.mykey:myvalue").vertices().asList().size()
==>1  // It works here!! The vertex is retrieved successfully.
gremlin> g.V().has("mykey", "myvalue").hasNext()
==>false // doesn't retrieve anything!!!
gremlin> g.V(16998408).values("mykey")
==>myvalue // the vertex exists in my graph for sure !!

我试过一个让它起作用的技巧

gremlin> g.V().has("mykey").has("mykey", "myvalue").next() 
19:49:44 WARN  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>v[16998408] // It works !!

这似乎是一个问题,但不确定究竟在哪里。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我对lucene索引有类似的问题 - 包括相同的索引使用症状。

请注意,在没有检索任何内容的查询中,它也没有抱怨缺少索引。但在查询中,它抱怨必须遍历所有顶点。

我怀疑它是失败的索引 - 简单的(" ...")操作首先需要非索引搜索,所以是成功的,但每次都是使用索引搜索,即失败。

答案 1 :(得分:0)

我正在使用ES和HBase,我也有同样的问题。

当我使用ES为String类型构建混合索引时,使用像

这样的soming事件进行查询时
g.V().has("mykey", "myvalue").hasNext()

它警告我,我没有使用索引,而且查询速度相当慢。

但是当我使用ES为Integer类型构建混合索引,并查询

g.V().has("myInt", "myIntValue").hasNext()
它没有发出任何警告,而且相当快速地查询。

所以现在我使用CompositeIndex for String类型来避免这个