我有一个 Cypher 查询,它的性能极差(约 30 秒):
START foo=node:foos('Name:*')
MATCH foo<-[:HasMember]-()<-[:PartOf]-()<-[:Connected]-bar
WHERE foo.Name IN ["name1", "name2"] AND bar.Enabled = true
RETURN DISTINCT bar.Guid AS Guid, foo.Name AS Name
我认为正在发生的事情是 Lucene 索引用于提取所有值,然后使用图形搜索来匹配集合中的名称,因为如果我将查询更改为下面的查询,则速度会快几个数量级(16 毫秒):
START foo=node:foos('Name:"name1" OR Name:"name2"')
MATCH foo<-[:HasMember]-()<-[:PartOf]-()<-[:Connected]-bar
WHERE bar.Enabled = true
RETURN DISTINCT bar.Guid AS Guid, foo.Name AS Name
有没有办法让第一个查询与第二个查询一样快地执行,而无需从名称集中手动构建一个 Lucene 查询?
另一种选择是使用遍历,但如果可能的话,我更喜欢留在 Cypher-land。