У меня есть запрос 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 из набора имен?
Другим вариантом было бы использование обхода, но я предпочитаю оставаться в стране шифров, если это возможно.