Использование WHERE IN с COLLECT, где коллекция создает карту

У меня есть график neo4j, который определяет отношения слов. Каждый словесный узел имеет отношение [r:IS_RELATED_TO] с любыми другими словами аналогичного характера. В этих отношениях есть сходство.

Мне нужно выполнить поиск по списку передаваемых слов. Следующий запрос должен пройти долгий путь, но я застрял на том, как использовать предложение WHERE.

WITH 
['landscape', 'photography', 'exposure'] as searchTermWords

//get all the words similar to those in the search term
match 
(w1:WordGraph_Word)-[r:IS_RELATED_TO]-(w2:WordGraph_Word)
where w1.word in searchTermWords
WITH COLLECT({
word1:w1,
word2:w2,
similarity:r.similarityValue
}) as similarWords



//get all question collections with those similar words
match 
(qc:QuestionCollection)-[:HAS_WORD]->(w:WordGraph_Word)
where w in similarWords.word1

return *

Когда я выполняю это, я получаю следующую ошибку:

Type mismatch: expected Any, Map, Node or Relationship 
but was List<Map> (line 19, column 12 (offset: 437))
"where w in similarWords.word1"

Я также попытался с "где w в похожих словах.['Word1']", и это тоже не получается.

Любые идеи будут приветствоваться.

Спасибо!

1 ответ

Что ж, similarWords это коллекция, а не карта, поэтому ключи являются целыми числами, и каждый элемент является картой, которую вы создаете в collect(),

Чтобы сделать это немного проще, я предлагаю небольшое изменение в коллекции:

WITH 
['landscape', 'photography', 'exposure'] as searchTermWords

//get all the words similar to those in the search term
MATCH
(w1:WordGraph_Word)-[r:IS_RELATED_TO]-(w2:WordGraph_Word)
where w1.word in searchTermWords
WITH w1, collect({word: w2, similarity: r.similarityValue}) AS similarWords
MATCH (w1)<-[:HAS_WORD]-(qc:QuestionCollection)
RETURN w1, similarWords, collect(qc) AS questions
Другие вопросы по тегам