Мне нужно получить тексты и сохранить их в Neo4j. После этого я разделяю каждое слово этого текста и создаю между ними [: NEXT] отношение, указывающее слово, которое приходит после другого, и отношение [: CONTAINS], указывающее, что текст содержит это слово. Наконец, я пытаюсь получить слово в тексте, имеющем больше отношений [: NEXT], но не во всей базе данных. Только в данном тексте.Запрос Cypher возвращает нежелательный результат
К сожалению, я просто получаю сумму всей базы данных.
Этот запрос:
query = '''
WITH split("%s"," ") as words
MERGE (p:Post {id: '%s', text: '%s'})
WITH p, words
UNWIND range(0,size(words)-2) as idx
MERGE (w1:Word {name:words[idx]})
MERGE (w2:Word {name:words[idx+1]})
MERGE (w1)-[:NEXT]->(w2)
MERGE (p)-[:CONTAINS]->(w2)
MERGE (p)-[:CONTAINS]->(w1)
WITH p
MATCH (p)-[c:CONTAINS]->(w:Word)
MATCH()-[n1:NEXT]->(:Word {name: w.name})<-[:CONTAINS]-(p)
MATCH (p)-[:CONTAINS]-(:Word {name: w.name})-[n2:NEXT]->()
WITH COUNT(n1) + COUNT(n2)AS score, w.name AS word, p.text AS post, p.id AS _id
RETURN post, word, score, _id;
''' %(text, id, text)
Я просто не могу найти проблему здесь.
Спасибо!
Можете ли вы описать, какие операции предназначены для поддержки? Если вы ищете быстрый поиск текста, поиск и подсчет очков, то есть гораздо лучшие инструменты, которые уже настроены для этого, например ElasticSearch. – InverseFalcon
Спасибо! Я посмотрю на это –
@ InverseFalcon Я прочитал об ElasticSearch, и я узнал, что это не то, что я ищу. Спасибо чувак! –