2013-08-02 3 views
2

У меня есть узел для пользователя с свойствами FirstName, LastName. Теперь я хочу найти некоторое значение в обоих свойствах с обоих сайтов. Позвольте мне объяснить.нечеткий поиск с использованием cypher

FirstName LastName 
--------- -------- 
Manish  Pal 
Pal  Dharmesh 
Rajpal  Yadav 
sharma  shreepal 

Теперь я хочу найти какой узел ПгвЬЫат или LastName содержит «дружок». Я написал такой запрос.

START users=node(*) 
WHERE (users.FirstName =~ '(?i)pal.*' OR users.LastName =~ '(?i)pal.*') 
RETURN users; 

Это дает мне только два узла, но я хочу, чтобы все узел с является содержащий «дружок»

Если я пытаюсь как этот

START users=node(*) 
WHERE (users.FirstName =~ '(?i)*.pal.*' OR users.LastName =~ '(?i)*.pal.*') 
RETURN users; 

Это дает мне следующее сообщение об ошибке.

"PatternSyntaxException"

Висячие мета-символ '' рядом с индексом 4 (? Я) .ant.^*

Я установил пример here для вашей полной справки.

Спасибо.

ответ

6

Второй запрос содержит недопустимый синтаксис регулярных выражений. Я думаю, что вы имеете в виду

START users=node(*) 
WHERE (users.FirstName =~ '(?i).*pal.*' OR users.LastName =~ '(?i).*pal.*') 
RETURN users 

Обратите внимание на разницу в запросе в вашем посте: '(?i)*.pal.*' в вашем посте и '(?i).*pal.*' в приведенном выше запросе. Звездочка * означает выражение, передо мной [звездочка] может появляться произвольное количество раз, включая ноль. Но (?i) не является регулярным выражением, а просто модификатором, чтобы игнорировать случай фактического выражения. Думаю, вы имели в виду .*. Регулярное выражение . соответствует любому символу, звездочка позволяет любому персонажу появляться произвольное количество раз. Таким образом '(?i)*.pal.*' говорит [игнорировать регистр] < произвольного количества любых символов > < точной последовательности символов дружок > < произвольного количества любых символов >

выше запрос вернуло четыре результата для меня:

users.FirstName | users.LastName 
--------------------------------- 
sharma   | shreepal 
Rajpal   | Yadav 
Pal    | Dharmesh  
Manish   | Pal 

Это то, что вы хотели, если я правильно понял вас.

+0

Мое удовольствие :-) Если бы ответ был верным, вы можете принять его, чтобы все могли видеть, что эта проблема решена. – khituras

+0

Я, это правда. но я не являюсь обычным пользователем stackoverflow, поэтому я могу изменить статус этого вопроса как принятый. не могли бы вы направить меня? так, в следующий раз я буду делать. спасибо –

+0

Конечно: Слева от текста ответа есть два элемента, которые вы должны увидеть: 1-ое, текущее состояние голосования ответа (этот ответ в настоящее время 1) и стрелки для голосования ответа вверх или вниз. Ниже этого условия голосования вы, как вопрос рейзера, должны увидеть полый галочку. Если - и только если - вы найдете ответ удовлетворительным, вы можете нажать на этот флажок, который должен превратить его в сплошную зелень.Затем вы приняли соответствующий ответ. Обратите внимание, что вы можете принимать только один ответ в случае, если даны несколько ответов. – khituras

Смежные вопросы