Поиск недвижимости в запросах neo4j - PullRequest
0 голосов
/ 10 сентября 2018

Существует узел Person, который состоит из 2 свойств: firstName, lastName.Пользователь может ввести firstName или lastName или оба.Если указаны оба имени, нет никакой гарантии, что имена находятся в порядке firstName и lastName.Например: если имя sherlock holmes, пользователь может указать holmes sherlock или только sherlock или holmes или sherlock holmes.Во всех этих случаях мы должны получить узел Шерлока Холмса.Если вход не указан, то должны быть возвращены все узлы Person.

Я попытался выполнить следующий запрос:

Match (n : Person )
where n.firstName+" "+n.lastName ={1} or n.lastName+" "+n.firstName={1}  
return n

Где {1} - имя.

Кто-нибудь может мне помочь !!

1 Ответ

0 голосов
/ 11 сентября 2018

[ОБНОВЛЕНО дважды]

Должно работать что-то вроде следующего.

WITH SPLIT($name, ' ') AS parts
WITH parts, SIZE(parts)=1 AS one_part
MATCH (n: Person)
WHERE
  parts IS NULL OR
  (n.firstName=parts[0] AND (one_part OR n.lastName=parts[1])) OR
  (n.lastName=parts[0] AND (one_part OR n.firstName=parts[1])) OR
  (parts[0] = '' AND NOT EXISTS(n.firstName) AND NOT EXISTS(n.lastName))
RETURN n

Особые случаи:

  • Если параметр name равен NULL,тогда возвращаются все узлы Person.
  • Если параметр name является пустой строкой, то этот запрос будет соответствовать любому узлу Person, имеющему пустую строку в качестве значения firstName или lastNameили не обладающие ни одним из этих свойств.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...