Шифрование запросов с логическими операторами

В продолжение моего предыдущего вопроса я хотел бы знать, как использовать логические операторы И, ИЛИ и НЕ при выполнении индексного запроса.

Используя тот же сценарий базы данных книжного клуба, как будет выглядеть запрос Cypher:

  1. Найти всех читателей, которые читали (художественную И документальную литературу) ИЛИ справочники?
  2. Найти всех читателей, которые читали (художественную ИЛИ документальную литературу) И НЕ справочники?

Я почти уверен, что эти два примера должны предоставить достаточно материала, чтобы охватить любой другой сценарий.

РЕДАКТИРОВАТЬ: я создал сценарий Neo4j Console, чтобы продемонстрировать это.


person Dave Michener    schedule 08.05.2013    source источник


Ответы (1)


Для вашего первого варианта использования вы можете попробовать это. Второе можно сделать аналогичными строками -

start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction'),
      b3=node:MyBookIndex('Genre:Reference')
match b1-[a?:HasRead]-r,
      b2-[b?:HasRead]-r,
      b3-[c?:HasRead]-r
where (a <> null and b <> null) or (c <> null)
return r.ReaderName

(Примечание: не тестировалось)

person Gopi    schedule 08.05.2013
comment
Это не сработало, поскольку я получаю следующее, используя вкладку браузера данных веб-консоли администратора Neo4j для выполнения запроса: › Неверный запрос › Этот шаблон сейчас не поддерживается. Эти элементы шаблона являются частью нескольких двойных необязательных путей, а это недопустимо. г1, Ф, г2 - person Dave Michener; 08.05.2013
comment
Обратите внимание, что в моем предыдущем комментарии упомянутый "r1, F, r2" взят из теста с использованием моих данных. Используя пример из ответа @Gopi, вы увидите "a, r, b". - person Dave Michener; 08.05.2013