Python Language
Py4Neo का उपयोग करके Neo4j और Cypher
खोज…
आयात करना और प्रमाणीकरण करना
from py2neo import authenticate, Graph, Node, Relationship
authenticate("localhost:7474", "neo4j", "<pass>")
graph = Graph()
आपको यह सुनिश्चित करना होगा कि आपका Neo4j डेटाबेस स्थानीय क्रेडेंशियल में मौजूद है: 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
आप इस क्वेरी का उपयोग किसी संबंध के स्थान (l)
से जुड़े सभी समाचार लेख (n)
खोजने के लिए कर सकते हैं।
साइफर क्वेरी नमूने
समय के साथ किसी विशेष व्यक्ति से जुड़े लेखों को गिनें
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