Во-первых, ваш запрос использует оператор regex
, и он не может использовать индексы. Вместо этого вы должны использовать оператор CONTAINS
:
MATCH (node:Symptom)
WHERE node.symptom CONTAINS 'adult male' OR node.symptom CONTAINS '151'
RETURN node
И вы можете создать индекс: CREATE INDEX ON :Symptom(symptom)
Для второй части вашего запроса, как таковой, делать нечего ... это связано со сложностью, которую вы просите сделать.
Итак, чтобы иметь лучшие показатели, вы должны подумать:
- поместите тип отношения в шаблон, чтобы уменьшить число возвращаемых путей:
(node)-[*1..2:MY_REL_TYPE]-(result:Disease)
- укажите направление на шаблоне, чтобы уменьшить число возвращаемых путей:
(node)-[*1..2:MY_REL_TYPE]->(result:Disease)
- найдите другой способ уменьшить эту сложность (отфильтруйте свойство отношения, просмотрите вашу модель и т. Д.)
Для вашей информации, вы можете напрямую написать запрос за один шаг (т. Е. Без WITH
, но в вашем случае производительность должна быть такой же):
MATCH (node:Symptom)-[*1..2]-(result:Disease)
WHERE node.symptom CONTAINS 'adult male' OR node.symptom CONTAINS '151'
RETURN result