我有一个带有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 !!
这似乎是一个问题,但不确定究竟在哪里。有什么想法吗?
答案 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类型来避免这个