Мне недавно передали базу данных Neo4j.Прочитав документы, он не кажется большим источником.Текущий Neo4j имеет 11 узлов и около нескольких сотен тысяч ребер.Я не уверен, что размер или атрибуты Neo4j замедляют обработку.
Поскольку запрос довольно большой, я опубликую его один раз в конце вопроса.
Если я использую предложение where для целей, оно дает мне результат через 7-8 секунд.
MATCH (contact:Contacts)
where lower(contact.Name) contains lower('Rick')
WITH contact
ORDER BY contact.Source asc
SKIP 0 LIMIT 20
Но тот же запрос возвращает точные результаты в течение пары миллисекунд, если используетсяследующим образом, но он возвращает только точные совпадения, а не все, которые содержат 'Rick'.
MATCH (contact:Contacts{Name:'Rick'})
WITH contact
ORDER BY contact.Source asc
SKIP 0 LIMIT 20
Есть ли способ использовать contains
в последнем способе, который кажется более быстрым.
Ниже приводится весь использованный запрос:
MATCH (contact:Contacts{Name:'Rick'})
WITH contact
ORDER BY contact.Source asc
SKIP 0 LIMIT 20
OPTIONAL MATCH (contact)-[workingFor:WorkingFor]->(company:Company)
with contact, workingFor, company
OPTIONAL MATCH (contact)-[contactForEmployee:ContactForEmployee]->(employee:Employee)
with contact,workingFor, company, contactForEmployee, employee
OPTIONAL MATCH (contact)-[InfoFor:InfoFor]-(LeadInfo:LeadInfo) with contact,workingFor, company, contactForEmployee, employee, InfoFor, LeadInfo
optional MATCH (contact)-[connectedTo:ConnectionDetails]-(contactTo:Contacts)
where date( connectedTo.LinckedInConnectedOn) <> date('1900-01-01')
WITH contact,connectedTo, contactTo, workingFor, company, contactForEmployee, employee ,InfoFor, LeadInfo
ORDER BY connectedTo.LinckedInConnectedOn DESC
WITH contact, collect(connectedTo)[..5] AS liConnections, collect(contactTo)[..5] AS liContacts, workingFor, company, contactForEmployee, employee, InfoFor, LeadInfo
optional MATCH (contact)-[ocConnections:ConnectionDetails]-(ocContactTo:Contacts)
where ocConnections.EmailConnectionStrengthStrong <> 0 or ocConnections.EmailConnectionStrengthMedium <> 0 or ocConnections.EmailConnectionStrengthLow <> 0
WITH contact,ocConnections, ocContactTo, liConnections, liContacts, workingFor, company,contactForEmployee, employee, InfoFor, LeadInfo
ORDER BY ocConnections.EmailConnectionStrengthStrong desc, ocConnections.EmailConnectionStrengthMedium desc,
ocConnections.EmailConnectionStrengthLow desc
WITH contact, collect(ocConnections)[..5] AS ocConnections, collect(ocContactTo)[..5] AS ocContactTo,
liConnections, liContacts, workingFor, company, contactForEmployee, employee,InfoFor, LeadInfo
RETURN contact, workingFor, company, contactForEmployee, employee,InfoFor, LeadInfo,
collect(liConnections) AS liConnections, collect(liContacts) AS liConnectedTo,
collect(ocConnections) as ocConnections, collect(ocContactTo) as ocConnectedTo