2016-05-12 8 views
0

私はESバックエンドと永続性のためのDynamoDBを持つタイタングラフを持っています。タイタン - 混在インデックスを持つhas()の奇妙な振る舞い

メソッド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

私は、同じインデックス使用状況を含むluceneインデックスで同様の問題を抱えています。

何も取得しないクエリでは、インデックスの不足についても不平を言わないことに注意してください。しかし、そうするクエリでは、すべての頂点を反復処理しなければならないという不満があります。

単純な( "...")操作では最初にインデックス以外の検索が必要なので、それは成功しますが、インデックス検索が使用されるたびに失敗します。

0

私はESとHBaseを使用していますが、同じ質問があります。

g.V().has("mykey", "myvalue").hasNext() 

ようsomingの事を照会するとき、私は、String型のためにESを用いた混合インデックスを構築するとき、それは私がインデックスを使用していないことを私に警告し、querysかなり遅いです。

しかし、私は整数型用のESを用いた混合インデックスを構築、など

g.V().has("myInt", "myIntValue").hasNext() 

を照会、それはかなり速く、何もしてquerysを警告しません。

これで、これを避けるために、String型に対してcompositeIndexを使用しました。