0

永続化のために ES バックエンドと DynamoDB を備えた Titan グラフがあります。

メソッドhas("mykey", "value")が頂点を取得することはありません。mykeyElasticsearch によってインデックス付けされた を照会する場合、常に何も返しません。インデックスが更新され、有効になります。

このクエリを実行すると、

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 !!

これはどこかの問題のようですが、正確にはわかりません。これについて何か考えはありますか?

4

2 に答える 2

0

同じインデックス使用の症状を含む、lucene インデックスで同様の問題が発生しています。

何も取得しないクエリでは、インデックスの欠如についても文句を言わないことに注意してください。しかし、それを行うクエリでは、すべての頂点を反復処理する必要があると不平を言っています。

失敗しているのはインデックスだと思います-単純な has("...") 操作は最初に非インデックス検索を必要とするため、成功していますが、インデックス検索が使用されるたびに失敗しています。

于 2016-08-29T20:07:02.377 に答える