SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Neo4j Product Overview
Neo4j Product Overview
NOSQL, The Web And The Enterprise
private static enum ExampleRelationshipTypes implements
RelationshipType
{
    EXAMPLE
}




GraphDatabaseService graphDb = new EmbeddedGraphDatabase( DB_PATH );
registerShutdownHook( graphDb );




graphDb.shutdown();
Transaction tx = graphDb.beginTx();
try
{
    Node firstNode = graphDb.createNode();
    firstNode.setProperty( NAME_KEY, "Hello" );
    Node secondNode = graphDb.createNode();
    secondNode.setProperty( NAME_KEY, "World" );
 
    firstNode.createRelationshipTo( secondNode,
        ExampleRelationshipTypes.EXAMPLE );
 
    String greeting = firstNode.getProperty( NAME_KEY ) + " "
        + secondNode.getProperty( NAME_KEY );
    System.out.println( greeting );
    tx.success();
}
finally
{
    tx.finish();
}
private void printFriends( Node person )
{
    Traverser traverser = person.traverse(
        Order.BREADTH_FIRST,   //
        StopEvaluator.END_OF_GRAPH, // Graph
        ReturnableEvaluator.ALL_BUT_START_NODE,
        MyRelationshipTypes.KNOWS, // ”KNOWS”
        Direction.OUTGOING ); //
    for ( Node friend : traverser )
    {   //       Node     ”name”
        System.out.println( friend.getProperty( "name" ) );
    }
}
1


            3


1


    2
private static Traverser findHackers( final Node startNode )
{
    TraversalDescription td = Traversal.description()
            .breadthFirst()
            .relationships( RelTypes.CODED_BY, Direction.OUTGOING )
            .relationships( RelTypes.KNOWS, Direction.OUTGOING )
            .evaluator(
                    Evaluators.returnWhereLastRelationshipTypeIs(
RelTypes.CODED_BY ) );
    return td.traverse( startNode );
}

Traverser traverser = findHackers( getNeoNode() );
int numberOfHackers = 0;
for ( Path hackerPath : traverser )
{
    System.out.println( "At depth " + hackerPath.length() + " => "
                        + hackerPath.endNode()
                                .getProperty( "name" ) );
}
Traverser traverser = person.traverse(
    Order.BREADTH_FIRST,
    StopEvaluator.END_OF_GRAPH,
    ReturnableEvaluator.ALL_BUT_START_NODE,
    MyRelationshipTypes.KNOWS,
    Direction.OUTGOING );
for ( Node friend : traverser ){...}
/*
    1. Begin a transaction.
    2. Operate on the graph.
    3. Mark the transaction as successful (or not).
    4. Finish the transaction.
*/
Transaction tx = graphDb.beginTx();
try
{
       ... // any operation that works with the node space
       tx.success();
}
finally
{
       tx.finish();
}
Graph Databases and Endogenous Indices
                                               name property index




views property index                                                                             gender property index




                                                 name=neo4j
                                                 views=56781

             page_rank=0.023                                         cites
                                       cites

                                                                                             name=tenderlove
                                                                                               gender=male
                                                created
                                                                             created
                             created
                                                     date=2007/10

                 cites
                                                                                       follows

                                                           follows
                         created
                                               name=peterneubauer                         follows
         name=graph_blog                                       follows
           views=1000                                                           follows
                                   created




                                                                                             name=ahzf
                                                    name=twarko
                                                      age=30
GraphDatabaseService graphDb = new
EmbeddedGraphDatabase( "path/to/neo4j-db" );
IndexService index = new LuceneIndexService( graphDb );


Node andy = graphDb.createNode();
Node larry = graphDb.createNode();


andy.setProperty( "name", "Andy Wachowski" );
andy.setProperty( "title", "Director" );
larry.setProperty( "name", "Larry Wachowski" );
larry.setProperty( "title", "Director" );
index.index( andy, "name", andy.getProperty( "name" ) );
index.index( andy, "title", andy.getProperty( "title" ) );
index.index( larry, "name", larry.getProperty( "name" ) );
index.index( larry, "title", larry.getProperty( "title" ) );
                                http://wiki.neo4j.org/content/Indexing_with_IndexService
// Return the andy node.
index.getSingleNode( "name", "Andy Wachowski" );


// Containing only the larry node
for ( Node hit : index.getNodes( "name", "Larry Wachowski" ) )
{
    // do something
}


// Containing both andy and larry
for ( Node hit : index.getNodes( "title", "Director" )
{
    // do something
}
                                http://wiki.neo4j.org/content/Indexing_with_IndexService
IndexService index = // your LuceneFulltextIndexService

index.getNodes( "name", "wachowski" ); // --> andy and larry
index.getNodes( "name", "andy" ); // --> andy
index.getNodes( "name", "Andy" ); // --> andy
index.getNodes( "name", "larry Wachowski" ); // --> larry
index.getNodes( "name", "wachowski larry" ); // --> larry
index.getNodes( "name", "wachow* andy" ); // --> andy and larry
index.getNodes( "name", "Andy" ); // --> andy
index.getNodes( "name", "andy" ); // --> andy
index.getNodes( "name", "wachowski" ); // --> andy and larry
index.getNodes( "name", "+wachow* +larry" ); // --> larry
index.getNodes( "name", "andy AND larry" ); // -->
index.getNodes( "name", "andy OR larry" ); // --> andy and larry
index.getNodes( "name", "Wachowski AND larry" ); // --> larry
                                  http://wiki.neo4j.org/content/Indexing_with_IndexService
of a spatial, 2D-index that is explicitly14 Marko A.within a Peter Neubauer
                                          modeled Rodriguez and                         1                                      2



                                                         In order to demonstrate how a quadtree index can be represented an
patial analysis makes use of advanced                indexing structuresis represents a quadtreeset is diagrammed i
                                                      versed, a toy graph data set presented. This data
                                                      ure 8. The top half of Figure 8                   index (vertices 1-9)
 [4, 17]. Quadtrees partition a two-dimensional plane into
 sed upon the spatial density of the points being indexed.                                             type=quad
ow space is partitioned as the density of points increases                                               bl=[0,0]
                                                                                                      tr=[100,100]

 e index.                                                                                                  1
                                                                                            sub                            sub


                                                                 type=quad                                         type=quad                      type=quad
                                                                   bl=[0,0]     2                          3        bl=[50,25]             4       bl=[50,0]
                                                                 tr=[50,100]                                        tr=[75,50]                   tr=[100,100]
                                                                                            type=quad               type=quad
                                                                                               bl=[0,0]              bl=[50,50]
                                                                                             tr=[50,50]            tr=[100,100]
                                                                 type=quad                                                                        type=quad
                                                                   bl=[0,50]    5                 6        9           7                   8        bl=[50,0]
                                                                 tr=[50,100]                                                                      tr=[100,50]
                                                                                                      type=quad
                                                                     [0,100] 1                         bl=[50,25]                                [100,100]
                                                                                                       tr=[62,37]


                                                                                                                            g          f

                                                                                    a       b
                                                                                                                       e
                                                                                5                              7


                                                                                                          9                                         bl=[25,20]
                                                                                                               d           3       h
                                                                                                  c                                                 tr=[90,45]

artition of a plane. This figure is an adaptation of a public
                                                                                                                                           i
d courtesy of David Eppstein.                          6                                                  2 4                                  8 [100,0]
                                                                        [0,0]

 motivations behind this article is to stress the A quadtree index ofof space that contains points of interest. The in
                                            Fig. 8. importance a
TraversalDescription description = Traversal.description()
    .breadthFirst()
    .relationships(Relationships.PAIRED, Direction.OUTGOING)
    .evaluator(Evaluators.excludeStartPosition());


description.traverse( startNode ); // Retrieves the traverser




start programmer=(3) match (programmer)-[:PAIRED]->(pair) return pair




start programmer=(3) match (programmer)-[:PAIRED]->(pair)
where pair.age > 30 return pair, count(*) order by age
skip 5 limit 10
[InComing/Outgoing relationships]
                             # All nodes that A has outgoing relationships to.
                             > start n=node(3) match (n)-->(x) return x
                             ==> Node[4]{name->"Bossman"}
                             ==> Node[5]{name->"Cesar"}
                             > start n=node(3) match (n)<--(x) return x
                             ==> Node[1]{name->David"}


[Match by relationship type]
# All nodes that are Blocked by A.
> start n=node(3) match (n)-[:BLOCKS]->(x) return x
==> Node[5]{name->"Cesar"}

[Multiple relationships]
# The three nodes in the path.
> start a=node(3) match (a)-[:KNOWS]->(b)-[:KNOWS]->(c) return a,b,c
==> a: Node[3]{name->"Anders"}
==> b: Node[4]{name->"Bossman"}
==> c: Node[2]{name->"Emil"}
[Shortest path]
# : find the shortest path between two nodes, as long as the path is max 15
relationships long. Inside of the parenthesis you can write


> start d=node(1), e=node(2) match p = shortestPath( d-[*..15]->e ) return p
==> p: (1)--[KNOWS,2]-->(3)--[KNOWS,0]-->(4)--[KNOWS,3]-->(2)
[Count/ Group Count]
> start n=node(2) match (n)-->(x) return n, count(*)
# The start node and the count of related nodes.
==>
n:         Node[2]{name->"A",property->13}
count(*): 3


> start n=node(2) match (n)-[r]->() return type(r), count(*)
# The relationship types and their group count.
==>
TYPE(r):   KNOWS
count(*): 3
[SUM/AVG/MAX/COLLECT]
> start n=node(2,3,4) return sum(n.property)
==> 90
> start n=node(2,3,4) return avg(n.property)
==> 30.0
> start n=node(2,3,4) return max(n.property)
==> 44
> start n=node(2,3,4) return collect(n.property)
==> List(13, 33, 44)
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j
An Introduction to Neo4j

Más contenido relacionado

Más de Takahiro Inoue

Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTakahiro Inoue
 
トレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングトレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングTakahiro Inoue
 
Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Takahiro Inoue
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューションTakahiro Inoue
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方Takahiro Inoue
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータTakahiro Inoue
 
事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612Takahiro Inoue
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)Takahiro Inoue
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜Takahiro Inoue
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Takahiro Inoue
 
Hadoop and the Data Scientist
Hadoop and the Data ScientistHadoop and the Data Scientist
Hadoop and the Data ScientistTakahiro Inoue
 
MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big DataTakahiro Inoue
 
An Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsAn Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsTakahiro Inoue
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to TinkerpopTakahiro Inoue
 
Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Takahiro Inoue
 
Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Takahiro Inoue
 
はじめてのGlusterFS
はじめてのGlusterFSはじめてのGlusterFS
はじめてのGlusterFSTakahiro Inoue
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDBTakahiro Inoue
 

Más de Takahiro Inoue (20)

Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC Demo
 
トレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングトレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティング
 
Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
 
事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!
 
Hadoop and the Data Scientist
Hadoop and the Data ScientistHadoop and the Data Scientist
Hadoop and the Data Scientist
 
MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big Data
 
An Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsAn Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB Plugins
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to Tinkerpop
 
Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)
 
Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)
 
Advanced MongoDB #1
Advanced MongoDB #1Advanced MongoDB #1
Advanced MongoDB #1
 
はじめてのGlusterFS
はじめてのGlusterFSはじめてのGlusterFS
はじめてのGlusterFS
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 

Último

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Último (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 

An Introduction to Neo4j

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 8. NOSQL, The Web And The Enterprise
  • 9.
  • 10.
  • 11. private static enum ExampleRelationshipTypes implements RelationshipType {     EXAMPLE } GraphDatabaseService graphDb = new EmbeddedGraphDatabase( DB_PATH ); registerShutdownHook( graphDb ); graphDb.shutdown();
  • 12. Transaction tx = graphDb.beginTx(); try {     Node firstNode = graphDb.createNode();     firstNode.setProperty( NAME_KEY, "Hello" );     Node secondNode = graphDb.createNode();     secondNode.setProperty( NAME_KEY, "World" );       firstNode.createRelationshipTo( secondNode,         ExampleRelationshipTypes.EXAMPLE );       String greeting = firstNode.getProperty( NAME_KEY ) + " "         + secondNode.getProperty( NAME_KEY );     System.out.println( greeting );     tx.success(); } finally {     tx.finish(); }
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. private void printFriends( Node person ) {     Traverser traverser = person.traverse(         Order.BREADTH_FIRST, //         StopEvaluator.END_OF_GRAPH, // Graph         ReturnableEvaluator.ALL_BUT_START_NODE,         MyRelationshipTypes.KNOWS, // ”KNOWS”         Direction.OUTGOING ); //     for ( Node friend : traverser )     { // Node ”name”         System.out.println( friend.getProperty( "name" ) );     } }
  • 18. 1 3 1 2
  • 19.
  • 20. private static Traverser findHackers( final Node startNode ) {     TraversalDescription td = Traversal.description()             .breadthFirst()             .relationships( RelTypes.CODED_BY, Direction.OUTGOING )             .relationships( RelTypes.KNOWS, Direction.OUTGOING )             .evaluator(                     Evaluators.returnWhereLastRelationshipTypeIs( RelTypes.CODED_BY ) );     return td.traverse( startNode ); } Traverser traverser = findHackers( getNeoNode() ); int numberOfHackers = 0; for ( Path hackerPath : traverser ) {     System.out.println( "At depth " + hackerPath.length() + " => "                         + hackerPath.endNode()                                 .getProperty( "name" ) ); }
  • 21. Traverser traverser = person.traverse(     Order.BREADTH_FIRST,     StopEvaluator.END_OF_GRAPH,     ReturnableEvaluator.ALL_BUT_START_NODE,     MyRelationshipTypes.KNOWS,     Direction.OUTGOING ); for ( Node friend : traverser ){...}
  • 22. /* 1. Begin a transaction. 2. Operate on the graph. 3. Mark the transaction as successful (or not). 4. Finish the transaction. */ Transaction tx = graphDb.beginTx(); try { ... // any operation that works with the node space tx.success(); } finally { tx.finish(); }
  • 23.
  • 24. Graph Databases and Endogenous Indices name property index views property index gender property index name=neo4j views=56781 page_rank=0.023 cites cites name=tenderlove gender=male created created created date=2007/10 cites follows follows created name=peterneubauer follows name=graph_blog follows views=1000 follows created name=ahzf name=twarko age=30
  • 25. GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "path/to/neo4j-db" ); IndexService index = new LuceneIndexService( graphDb ); Node andy = graphDb.createNode(); Node larry = graphDb.createNode(); andy.setProperty( "name", "Andy Wachowski" ); andy.setProperty( "title", "Director" ); larry.setProperty( "name", "Larry Wachowski" ); larry.setProperty( "title", "Director" ); index.index( andy, "name", andy.getProperty( "name" ) ); index.index( andy, "title", andy.getProperty( "title" ) ); index.index( larry, "name", larry.getProperty( "name" ) ); index.index( larry, "title", larry.getProperty( "title" ) ); http://wiki.neo4j.org/content/Indexing_with_IndexService
  • 26. // Return the andy node. index.getSingleNode( "name", "Andy Wachowski" ); // Containing only the larry node for ( Node hit : index.getNodes( "name", "Larry Wachowski" ) ) { // do something } // Containing both andy and larry for ( Node hit : index.getNodes( "title", "Director" ) { // do something } http://wiki.neo4j.org/content/Indexing_with_IndexService
  • 27. IndexService index = // your LuceneFulltextIndexService index.getNodes( "name", "wachowski" ); // --> andy and larry index.getNodes( "name", "andy" ); // --> andy index.getNodes( "name", "Andy" ); // --> andy index.getNodes( "name", "larry Wachowski" ); // --> larry index.getNodes( "name", "wachowski larry" ); // --> larry index.getNodes( "name", "wachow* andy" ); // --> andy and larry index.getNodes( "name", "Andy" ); // --> andy index.getNodes( "name", "andy" ); // --> andy index.getNodes( "name", "wachowski" ); // --> andy and larry index.getNodes( "name", "+wachow* +larry" ); // --> larry index.getNodes( "name", "andy AND larry" ); // --> index.getNodes( "name", "andy OR larry" ); // --> andy and larry index.getNodes( "name", "Wachowski AND larry" ); // --> larry http://wiki.neo4j.org/content/Indexing_with_IndexService
  • 28. of a spatial, 2D-index that is explicitly14 Marko A.within a Peter Neubauer modeled Rodriguez and 1 2 In order to demonstrate how a quadtree index can be represented an patial analysis makes use of advanced indexing structuresis represents a quadtreeset is diagrammed i versed, a toy graph data set presented. This data ure 8. The top half of Figure 8 index (vertices 1-9) [4, 17]. Quadtrees partition a two-dimensional plane into sed upon the spatial density of the points being indexed. type=quad ow space is partitioned as the density of points increases bl=[0,0] tr=[100,100] e index. 1 sub sub type=quad type=quad type=quad bl=[0,0] 2 3 bl=[50,25] 4 bl=[50,0] tr=[50,100] tr=[75,50] tr=[100,100] type=quad type=quad bl=[0,0] bl=[50,50] tr=[50,50] tr=[100,100] type=quad type=quad bl=[0,50] 5 6 9 7 8 bl=[50,0] tr=[50,100] tr=[100,50] type=quad [0,100] 1 bl=[50,25] [100,100] tr=[62,37] g f a b e 5 7 9 bl=[25,20] d 3 h c tr=[90,45] artition of a plane. This figure is an adaptation of a public i d courtesy of David Eppstein. 6 2 4 8 [100,0] [0,0] motivations behind this article is to stress the A quadtree index ofof space that contains points of interest. The in Fig. 8. importance a
  • 29.
  • 30.
  • 31. TraversalDescription description = Traversal.description() .breadthFirst() .relationships(Relationships.PAIRED, Direction.OUTGOING) .evaluator(Evaluators.excludeStartPosition()); description.traverse( startNode ); // Retrieves the traverser start programmer=(3) match (programmer)-[:PAIRED]->(pair) return pair start programmer=(3) match (programmer)-[:PAIRED]->(pair) where pair.age > 30 return pair, count(*) order by age skip 5 limit 10
  • 32. [InComing/Outgoing relationships] # All nodes that A has outgoing relationships to. > start n=node(3) match (n)-->(x) return x ==> Node[4]{name->"Bossman"} ==> Node[5]{name->"Cesar"} > start n=node(3) match (n)<--(x) return x ==> Node[1]{name->David"} [Match by relationship type] # All nodes that are Blocked by A. > start n=node(3) match (n)-[:BLOCKS]->(x) return x ==> Node[5]{name->"Cesar"} [Multiple relationships] # The three nodes in the path. > start a=node(3) match (a)-[:KNOWS]->(b)-[:KNOWS]->(c) return a,b,c ==> a: Node[3]{name->"Anders"} ==> b: Node[4]{name->"Bossman"} ==> c: Node[2]{name->"Emil"}
  • 33. [Shortest path] # : find the shortest path between two nodes, as long as the path is max 15 relationships long. Inside of the parenthesis you can write > start d=node(1), e=node(2) match p = shortestPath( d-[*..15]->e ) return p ==> p: (1)--[KNOWS,2]-->(3)--[KNOWS,0]-->(4)--[KNOWS,3]-->(2)
  • 34. [Count/ Group Count] > start n=node(2) match (n)-->(x) return n, count(*) # The start node and the count of related nodes. ==> n: Node[2]{name->"A",property->13} count(*): 3 > start n=node(2) match (n)-[r]->() return type(r), count(*) # The relationship types and their group count. ==> TYPE(r): KNOWS count(*): 3
  • 35. [SUM/AVG/MAX/COLLECT] > start n=node(2,3,4) return sum(n.property) ==> 90 > start n=node(2,3,4) return avg(n.property) ==> 30.0 > start n=node(2,3,4) return max(n.property) ==> 44 > start n=node(2,3,4) return collect(n.property) ==> List(13, 33, 44)