2013-09-05 3 views
0

Я использую Cineasts Movies & Actors (12.3MB) dataset, и я хочу получить путь от Кевина Бэкона и всех актеров США, с которыми он играл, которые также играли в драматическом фильме. Так что я сделал это Cypher запроса, который не возвращает строки:Неправильное совпадение с использованием регулярного выражения в запросах cypher

START KB=node(759) 

MATCH (KB)-->(m1)<--(p)-->(m2) 

WHERE HAS(p.birthplace) AND p.birthplace =~ ".*(USA|United States)" AND m2.genre = "Drama" 

RETURN m1, p, m2 

Однако если избавиться от регулярного выражения (p.birthplace = "USA"), он возвращает один результат. Что не так? Первоначальный запрос должен возвращать хотя бы одну строку. Я использую Neo4j 1.9.2.

+0

Вы также должны использовать отношения-тип как '(KB) - [: ACTED_IN] -> (m1) <- [: ACTED_IN] - (p) - [: ACTED_IN] -> (m2)' и попытаться не использовать идентификаторы узлов, а скорее индексные запросы найти узлы. –

ответ

2

На самом деле это больше REGEX, чем neo4j или cypher. Ваши недостающие скобки. (США) Соединенные Штаты Америки США или Соединенные Штаты, bc the | является ORing двух символов A и U. Попробуйте ((США) | (США))

EDIT: PS, попробуйте этот сайт для отличной поддержки регулярных выражений и тестов http://gskinner.com/RegExr/

+0

Я пробовал, но он не работает. Он работает, только если я удаляю 'AND m2.genre =" Drama "', что действительно странно. – Seb

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