Документация по Python

Работа с Neo4j и Cypher с помощью Py2Neo

В: Документация по Python

Введение

Примеры

Импорт и аутентификация

 from py2neo import authenticate, Graph, Node, Relationship
authenticate("localhost:7474", "neo4j", "<pass>")
graph = Graph()

 

Вы должны убедиться, что база данных Neo4j существует по адресу localhost: 7474 с соответствующими учетными данными.

graph объект является вашим интерфейсом к экземпляру Neo4j в остальной части коды питона. Скорее слава делает эту глобальную переменную, вы должны держать его в классе по __init__ методу.

Добавление узлов в график Neo4j

 results = News.objects.todays_news()
for r in results:
    article = graph.merge_one("NewsArticle", "news_id", r)
    article.properties["title"] = results[r]['news_title']
    article.properties["timestamp"] = results[r]['news_timestamp']
    article.push()
    [...]

 

Добавление узлов графа является довольно простым, graph.merge_one важен , так как он предотвращает повторяющиеся элементы. (Если запустить скрипт дважды, то во второй раз он обновит заголовок и не создаст новые узлы для тех же статей)

timestamp должна быть целым числом , а не строка даты , как Neo4j реально не имеют даты тип данных. Это вызывает проблемы сортировки, когда вы сохраняете дату как '05 -06-1989'

article.push() является вызовом , который фактически совершает операцию в Neo4j. Не забудьте этот шаг.

Добавление отношений в график Neo4j

 results = News.objects.todays_news()
for r in results:
    article = graph.merge_one("NewsArticle", "news_id", r)
    if 'LOCATION' in results[r].keys():
        for loc in results[r]['LOCATION']:
            loc = graph.merge_one("Location", "name", loc)
            try:
                rel = graph.create_unique(Relationship(article, "about_place", loc))
            except Exception, e:
                print e

 

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

Запрос 1: Автозаполнение в заголовках новостей

 def get_autocomplete(text):
    query = """
    start n = node(*) where n.name =~ '(?i)%s.*' return n.name,labels(n) limit 10;
    """
    query = query % (text)
    obj = []
    for res in graph.cypher.execute(query):
        # print res[0],res[1]
        obj.append({'name':res[0],'entity_type':res[1]})
    return res

 

Это образец монограмма запрос , чтобы получить все узлы с имуществом name , которое начинается с аргументом text .

Запрос 2: Получить статьи новостей по месту на определенную дату

 def search_news_by_entity(location,timestamp):
    query = """
    MATCH (n)-[]->(l) 
    where l.name='%s' and n.timestamp='%s'
    RETURN n.news_id limit 10
    """

    query = query % (location,timestamp)

    news_ids = []
    for res in graph.cypher.execute(query):
        news_ids.append(str(res[0]))

    return news_ids

 

Вы можете использовать этот запрос , чтобы найти все статьи новостей (n) подключен к месту (l) отношения.

Cypher Query Samples

Подсчет статей, связанных с конкретным человеком с течением времени

 MATCH (n)-[]->(l) 
where l.name='Donald Trump'
RETURN n.date,count(*) order by n.date

 

Поиск других людей / мест, связанных с теми же новостными статьями, что и у Трампа, по крайней мере с 5 узлами общих отношений.

MATCH (n:NewsArticle)-[]->(l)
where l.name='Donald Trump'
MATCH (n:NewsArticle)-[]->(m)
with m,count(n) as num where num>5
return labels(m)[0],(m.name), num order by num desc limit 10

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.