我知道自从泰坦时代出现Stack Overflow以来,这个问题已经问了很多,但是我仍然无法解决这个问题。每次使用JanusGraph运行查询时,都会收到警告WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [(code = LHR)]. For better performance, use indexes
。我使用带有共享配置集的SolrCloud遵循JanusGraph文档here上的说明。我没有收到此警告,当我加载随JanusGraph安装一起提供的内部数据时,查询似乎正在启用索引。我所做的是我使用以下命令加载了here描述的GraphOfTheGodsFactory
:
graph = JanusGraphFactory.open('conf/janusgraph-cql-solr.properties')
GraphOfTheGodsFactory.load(graph)
g = graph.traversal()
g.E().has('place', geoWithin(Geoshape.circle(37.97, 23.72, 50)))
上面的最后一条命令返回:
==>e[5y0-6gw-9hx-6hc][8384-battled->8400]
==>e[5js-6gw-9hx-3ao][8384-battled->4272]
请注意,该命令没有返回警告For better performance, use indexes
,并且我测试了如果我在不使用solr的情况下运行上面的最后一条命令,则会收到该警告,这意味着我可以在内部数据。但是,当我使用Practical Gremlin提供的外部数据时,无法使用索引,并且会收到警告。为了描述我所做的事情,我首先从air-routes-latest.graphml
文件中加载了数据,并在下面运行了命令:
graph.tx().rollback()
mgmt=graph.openManagement()
idx=mgmt.buildIndex('airportIndex',Vertex.class)
iata = mgmt.getPropertyKey('code')
idx.addKey(iata).buildCompositeIndex()
mgmt.commit()
g.V().has('code','LHR')
上面的最后一条命令返回WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [(code = LHR)]. For better performance, use indexes
。
我使用JanusGraph 0.4.0,Solr 7.7.2和Cassandra 3.11.5。
编辑: 好的,现在可以了。 我所做的一切如下所示:
graph.tx().rollback()
mgmt=graph.openManagement()
idx=mgmt.buildIndex('airportIndex',Vertex.class)
iata = mgmt.getPropertyKey('code')
idx.addKey(iata).buildCompositeIndex()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'airportIndex').status(SchemaStatus.REGISTERED).call()
mgmt = graph.openManagement()
mgmt.awaitGraphIndexStatus(graph, 'airportIndex').call()
mgmt.updateIndex(mgmt.getGraphIndex("airportIndex"), SchemaAction.REINDEX).get()
mgmt.commit()
g.V().has('code','LHR')
这将成功返回值,而不会发出警告。