2
似乎gremlin遍歷在同一個遍歷掛起中同時使用輔助索引和搜索索引。這是爲什麼?DSE圖:使用輔助索引和搜索索引的遍歷,它們爲什麼會掛起?
我對DSE圖docs on indexing的理解是,對於低基數屬性最合適的索引是二級索引。我有一個'type'屬性的模型,以便有可能的類型數量有限;所以當我需要一個索引時,我使用了一個二級索引。
但它似乎是不可能在同一個遍歷同時使用二次和搜索索引,通過下面的例子作爲證明:
gremlin> system.graph('example').create()
==>null
gremlin> :remote config alias g example.g
==>g=example.g
gremlin> schema.vertexLabel('item').create()
==>null
gremlin> schema.propertyKey('type').Text().single().create()
==>null
gremlin> schema.propertyKey('description').Text().single().create()
==>null
gremlin> schema.vertexLabel('item').properties('type').add()
==>null
gremlin> schema.vertexLabel('item').properties('description').add()
==>null
gremlin> schema.vertexLabel('item').index('byType').secondary().by('type').add()
==>null
gremlin> schema.vertexLabel('item').index('search').search().by('description').add()
==>null
gremlin> graph.addVertex(label, 'item', 'type', 'A', 'description', 'first item is orange')
==>v[{~label=item, community_id=96406144, member_id=0}]
gremlin> graph.addVertex(label, 'item', 'type', 'A', 'description', 'second item is blue')
==>v[{~label=item, community_id=2076720128, member_id=0}]
gremlin> graph.addVertex(label, 'item', 'type', 'B', 'description', 'third item is green')
==>v[{~label=item, community_id=51027072, member_id=0}]
gremlin> g.V().hasLabel('item').has('type', 'A')
==>v[{~label=item, community_id=2076720128, member_id=0}]
==>v[{~label=item, community_id=96406144, member_id=0}]
gremlin> g.V().hasLabel('item').has('description', Search.token('blue'))
==>v[{~label=item, community_id=2076720128, member_id=0}]
gremlin> g.V().hasLabel('item').has('type', 'A').has('description', Search.token('blue'))
在最後遍歷,服務器日誌中/var/log/cassandra/system.log
下面的語句:
WARN [gremlin-server-worker-1] 2016-09-15 14:26:49,759 GremlinExecutor.java:267 - Timing out script - g.V().hasLabel('item').has('type', 'A').has('description', Search.token('blue')) - in thread [gremlin-server-worker-1]
而控制檯完全凍結,甚至不響應SIGTERM。
我們正在考慮這一點,我發了一封電子郵件。 – peytoncas