Suche…


Importieren und Authentifizieren

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

Sie müssen sicherstellen, dass Ihre Neo4j-Datenbank unter localhost: 7474 mit den entsprechenden Anmeldeinformationen vorhanden ist.

Das graph ist Ihre Schnittstelle zur neo4j-Instanz im Rest Ihres Python-Codes. Danken Sie es nicht, diese Variable zu einer globalen Variablen zu __init__ .

Knoten zum Neo4j-Diagramm hinzufügen

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()
    [...]

Das Hinzufügen von Knoten zum Diagramm ist ziemlich einfach. graph.merge_one ist wichtig, da doppelte Elemente graph.merge_one werden. (Wenn Sie das Skript zweimal ausführen, wird der Titel beim zweiten Mal aktualisiert, und es werden keine neuen Knoten für dieselben Artikel erstellt.)

timestamp sollte eine Ganzzahl und keine Datumszeichenfolge sein, da neo4j nicht wirklich einen Datumsdatentyp hat. Dies führt zu Sortierproblemen, wenn Sie das Datum als '05 -06-1989 'speichern.

article.push() ist der Aufruf, der die Operation tatsächlich in neo4j festschreibt. Vergiss diesen Schritt nicht.

Hinzufügen von Beziehungen zum Neo4j-Diagramm

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 ist wichtig, um Duplikate zu vermeiden. Aber sonst ist es eine ziemlich unkomplizierte Operation. Der Beziehungsname ist auch wichtig, da Sie ihn in fortgeschrittenen Fällen verwenden würden.

Abfrage 1: Autovervollständigung bei Nachrichtentiteln

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

Dies ist ein Beispiel Chiffre Abfrage alle Knoten mit der Eigenschaft zu erhalten name , die mit dem Argument beginnt text .

Abfrage 2: Abrufen von Nachrichtenartikeln an einem bestimmten Datum nach Standort

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

Sie können diese Abfrage verwenden, um alle Nachrichtenartikel (n) zu finden, die durch eine Beziehung mit einem Ort (l) .

Cypher Query Samples

Zählen Sie Artikel, die im Laufe der Zeit mit einer bestimmten Person verbunden sind

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

Suchen Sie nach anderen Personen / Orten, die mit den gleichen Nachrichtenartikeln wie Trump verbunden sind, mit insgesamt mindestens fünf Beziehungsknoten.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow