수색…


가져 오기 및 인증

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 이 중요합니다. (스크립트를 두 번 실행하면 두 번째로 제목을 업데이트하고 동일한 기사에 대한 새 노드를 만들지 않습니다)

neo4j에는 실제로 날짜 데이터 유형이 없으므로 timestamp 는 정수가 아니고 날짜 문자열이 아니어야합니다. 이로 인해 날짜를 '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

이것은 인수 text 시작하는 속성 name 을 가진 모든 노드를 가져 오는 샘플 cypher 쿼리입니다.

검색어 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

이 쿼리를 사용하여 관계로 위치 (l) 에 연결된 모든 뉴스 기사 (n) 를 찾을 수 있습니다.

Cypher 쿼리 샘플

시간이 지남에 따라 특정 사람과 관련된 기사 집계

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

적어도 5 개의 총 관계 노드가있는 Trump와 같은 뉴스 기사에 연결된 다른 사람 / 위치를 검색하십시오.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow