diff --git a/antora.yml b/antora.yml index 5be3b1f5d..065e8d219 100644 --- a/antora.yml +++ b/antora.yml @@ -1,6 +1,6 @@ name: aura title: Neo4j Aura -version: ~ +version: 'preview' start_page: ROOT:index.adoc nav: - modules/ROOT/content-nav.adoc diff --git a/modules/ROOT/content-nav.adoc b/modules/ROOT/content-nav.adoc index ab47594ae..8a7a672d2 100644 --- a/modules/ROOT/content-nav.adoc +++ b/modules/ROOT/content-nav.adoc @@ -1,111 +1,81 @@ //// Generic Start //// -* *Neo4j Aura* - -* xref:index.adoc[Overview] - -* xref:platform/create-account.adoc[] -* xref:platform/cloud-providers.adoc[Cloud provider marketplaces] - -* Security -** xref:platform/security/secure-connections.adoc[] -** xref:platform/security/single-sign-on.adoc[] -** xref:platform/security/encryption.adoc[] - -* xref:platform/user-management.adoc[] -* xref:platform/apoc.adoc[] -* xref:platform/metrics-integration.adoc[Metrics Integration] - -* Logging -** xref:platform/logging/download-logs.adoc[] -** xref:platform/logging/log-forwarding.adoc[] -// ** xref:platform/logging/query-log-analyzer.adoc[] - -* Neo4j connectors -** xref:platform/connectors/spark.adoc[] -** xref:platform/connectors/kafka.adoc[] -** xref:platform/connectors/bi.adoc[] - -* Aura API -** xref:platform/api/overview.adoc[] -** xref:platform/api/authentication.adoc[] -** link:{neo4j-docs-base-uri}/aura/platform/api/specification/[API Specification] - -//// -Generic End -//// - -//// -AuraDB Start -//// -* *Neo4j AuraDB* - -* xref:auradb/index.adoc[Overview] - -* Getting Started -** xref:auradb/getting-started/create-database.adoc[] -** xref:auradb/getting-started/connect-database.adoc[] -** xref:auradb/getting-started/query-database.adoc[] - -* Importing -** xref:auradb/importing/importing-data.adoc[] -** xref:auradb/importing/import-database.adoc[] - -* Managing instances -** xref:auradb/managing-databases/monitoring.adoc[] -** xref:auradb/managing-databases/advanced-metrics.adoc[] -** xref:auradb/managing-databases/backup-restore-export.adoc[] -** xref:auradb/managing-databases/database-actions.adoc[] - -* xref:auradb/connecting-applications/overview.adoc[Connecting applications] +* **Neo4j Aura console** + +* **Introduction** +** xref:index.adoc[About Aura] +** xref:visual-tour/index.adoc[Visual tour] + +* **Get started** +** xref:platform/create-account.adoc[] +** xref:getting-started/create-database.adoc[Create an instance] +** xref:getting-started/connect-database.adoc[Connect to an instance] +//** xref:importing/importing-data.adoc[Import data] + +* **Manage instances** +** xref:managing-databases/database-actions.adoc[Instance actions] +** xref:managing-databases/instance-details.adoc[Instance details] +** xref:managing-databases/instance-resources.adoc[Resources] +** xref:managing-databases/develop.adoc[Develop] + +//(tapping on resources will take you to the metrics tab, and then I fully document the metrics tab further down and I link to that in my notes) + +* **Import data** +** xref:import/introduction.adoc[What is Import?] +** xref:import/visual-tour.adoc[Visual tour] +** xref:import/file-provision.adoc[File provision] +** xref:import/modeling.adoc[Model data] +** xref:import/mapping.adoc[Map data] +** xref:import/indexes-and-constraints.adoc[Indexes and constraints] +** xref:import/import.adoc[Run the import] + + +* **Explore data** +** xref:explore/introduction.adoc[What is Explore?] +** xref:explore/explore-quick-start.adoc[Quick start] + +** Visual tour +*** xref:explore/explore-visual-tour/explore-overview.adoc[Explore overview] +*** xref:explore/explore-visual-tour/perspective-drawer.adoc[Perspective drawer] +//*** xref:auradb/explore/explore-visual-tour/settings-drawer.adoc[Settings drawer] +*** xref:explore/explore-visual-tour/legend-panel.adoc[Legend panel] +*** xref:explore/explore-visual-tour/search-bar.adoc[Search bar] +*** xref:explore/explore-visual-tour/card-list.adoc[Card list] +*** xref:explore/explore-visual-tour/scene-interactions.adoc[Scene interactions] + +** Perspectives +*** xref:explore/explore-perspectives/perspectives.adoc[Perspectives - A business view of the graph] +*** xref:explore/explore-perspectives/perspective-creation.adoc[Creation and use] +*** xref:explore/explore-perspectives/refresh-perspectives.adoc[Refresh Perspectives] +*** xref:explore/explore-perspectives/database-scans.adoc[Database scans] + +** Explore features in detail +*** xref:explore/explore-features/graph-pattern-search.adoc[Graph pattern search] +*** xref:explore/explore-features/search-phrases-advanced.adoc[Search phrases for advanced queries] +*** xref:explore/explore-features/scene-actions.adoc[Scene actions] +*** xref:explore/explore-features/full-text-search.adoc[Full-text search] +*** xref:explore/explore-features/edit-graph-data.adoc[Edit graph data] +*** xref:explore/explore-features/slicer.adoc[Slicer] +** xref:explore/explore-default-actions.adoc[Default actions and shortcuts] + + +* **Query data** +** xref:query/introduction.adoc[What is Query?] +** xref:query/visual-tour.adoc[Visual tour] +** xref:query/operations.adoc[Query operations] + +* **Metrics** +** xref:all-metrics.adoc[All metrics] + +// * **Logs** +// ** xref:auradb/managing-databases/logs.adoc[Logs coming soon] + +* **Manage users** +** xref:user-management.adoc[] + +* **Connecting applications** +** xref:connecting-applications/overview.adoc[Drivers and libraries] //// AuraDB End //// - -//// -AuraDS Start -//// -* *Neo4j AuraDS* - -* xref:aurads/index.adoc[Overview] -* xref:aurads/architecture.adoc[] - -* xref:aurads/create-instance.adoc[] - -* xref:aurads/connecting/index.adoc[] -** xref:aurads/connecting/neo4j-applications.adoc[] -** xref:aurads/connecting/python.adoc[] - -* Usage examples -** xref:aurads/tutorials/graph-catalog.adoc[] -** xref:aurads/tutorials/algorithm-modes.adoc[] -** xref:aurads/tutorials/memory-estimation.adoc[] -** xref:aurads/tutorials/algorithm-progress.adoc[] -** xref:aurads/tutorials/model-catalog.adoc[] -** xref:aurads/tutorials/arrow-examples.adoc[] - -* xref:aurads/importing-data/index.adoc[] -** xref:aurads/importing-data/import-db.adoc[] -** xref:aurads/importing-data/data-importer.adoc[] -** xref:aurads/importing-data/load-csv.adoc[] - -* Managing instances -** xref:aurads/managing-instances/monitoring.adoc[] -** xref:aurads/managing-instances/advanced-metrics.adoc[] -** xref:aurads/managing-instances/backup-restore-export.adoc[] -** xref:aurads/managing-instances/instance-actions.adoc[] -//// -AuraDS End -//// - -* *Tutorials* -* Upgrade and migration -** xref:tutorials/upgrade.adoc[] -** xref:tutorials/migration.adoc[] -* Integrating with Neo4j Connectors -** xref:tutorials/spark.adoc[] -** xref:tutorials/bi.adoc[] -* xref:tutorials/performance-improvements.adoc[] -* xref:tutorials/troubleshooting.adoc[] -* xref:tutorials/create-auradb-instance-from-terminal.adoc[] diff --git a/modules/ROOT/images/action-availability.png b/modules/ROOT/images/action-availability.png new file mode 100644 index 000000000..b1c2381d4 Binary files /dev/null and b/modules/ROOT/images/action-availability.png differ diff --git a/modules/ROOT/images/add_range.png b/modules/ROOT/images/add_range.png new file mode 100644 index 000000000..95b991983 Binary files /dev/null and b/modules/ROOT/images/add_range.png differ diff --git a/modules/ROOT/images/advanced-expansion.png b/modules/ROOT/images/advanced-expansion.png new file mode 100644 index 000000000..42b21f7af Binary files /dev/null and b/modules/ROOT/images/advanced-expansion.png differ diff --git a/modules/ROOT/images/breadcrumbs.png b/modules/ROOT/images/breadcrumbs.png new file mode 100644 index 000000000..d45854b37 Binary files /dev/null and b/modules/ROOT/images/breadcrumbs.png differ diff --git a/modules/ROOT/images/captions.png b/modules/ROOT/images/captions.png new file mode 100644 index 000000000..9f4890d00 Binary files /dev/null and b/modules/ROOT/images/captions.png differ diff --git a/modules/ROOT/images/card-list.png b/modules/ROOT/images/card-list.png new file mode 100644 index 000000000..c68942a1e Binary files /dev/null and b/modules/ROOT/images/card-list.png differ diff --git a/modules/ROOT/images/connection-dropdown.png b/modules/ROOT/images/connection-dropdown.png new file mode 100644 index 000000000..b93d61f0f Binary files /dev/null and b/modules/ROOT/images/connection-dropdown.png differ diff --git a/modules/ROOT/images/connectionbanner.png b/modules/ROOT/images/connectionbanner.png new file mode 100644 index 000000000..c4818475d Binary files /dev/null and b/modules/ROOT/images/connectionbanner.png differ diff --git a/modules/ROOT/images/connectionmodal.png b/modules/ROOT/images/connectionmodal.png new file mode 100644 index 000000000..2dbb388d3 Binary files /dev/null and b/modules/ROOT/images/connectionmodal.png differ diff --git a/modules/ROOT/images/constraints-tab.png b/modules/ROOT/images/constraints-tab.png new file mode 100644 index 000000000..138bfc920 Binary files /dev/null and b/modules/ROOT/images/constraints-tab.png differ diff --git a/modules/ROOT/images/context-double.png b/modules/ROOT/images/context-double.png new file mode 100644 index 000000000..5cf83df1d Binary files /dev/null and b/modules/ROOT/images/context-double.png differ diff --git a/modules/ROOT/images/coordinate-layout.png b/modules/ROOT/images/coordinate-layout.png new file mode 100644 index 000000000..6dcd2f0f6 Binary files /dev/null and b/modules/ROOT/images/coordinate-layout.png differ diff --git a/modules/ROOT/images/create-node.png b/modules/ROOT/images/create-node.png new file mode 100644 index 000000000..473692302 Binary files /dev/null and b/modules/ROOT/images/create-node.png differ diff --git a/modules/ROOT/images/create-relationship.png b/modules/ROOT/images/create-relationship.png new file mode 100644 index 000000000..9aae16f97 Binary files /dev/null and b/modules/ROOT/images/create-relationship.png differ diff --git a/modules/ROOT/images/database-drawer.png b/modules/ROOT/images/database-drawer.png new file mode 100644 index 000000000..4d02a40a1 Binary files /dev/null and b/modules/ROOT/images/database-drawer.png differ diff --git a/modules/ROOT/images/dataimporterdocs.png b/modules/ROOT/images/dataimporterdocs.png new file mode 100644 index 000000000..dd9c26806 Binary files /dev/null and b/modules/ROOT/images/dataimporterdocs.png differ diff --git a/modules/ROOT/images/datascan-generate.png b/modules/ROOT/images/datascan-generate.png new file mode 100644 index 000000000..9073bd515 Binary files /dev/null and b/modules/ROOT/images/datascan-generate.png differ diff --git a/modules/ROOT/images/datascan-refresh.png b/modules/ROOT/images/datascan-refresh.png new file mode 100644 index 000000000..2702355da Binary files /dev/null and b/modules/ROOT/images/datascan-refresh.png differ diff --git a/modules/ROOT/images/dataservices.png b/modules/ROOT/images/dataservices.png new file mode 100644 index 000000000..fd9c530d9 Binary files /dev/null and b/modules/ROOT/images/dataservices.png differ diff --git a/modules/ROOT/images/degree-centrality.png b/modules/ROOT/images/degree-centrality.png new file mode 100644 index 000000000..5e1191782 Binary files /dev/null and b/modules/ROOT/images/degree-centrality.png differ diff --git a/modules/ROOT/images/delete-node.png b/modules/ROOT/images/delete-node.png new file mode 100644 index 000000000..9512f4d98 Binary files /dev/null and b/modules/ROOT/images/delete-node.png differ diff --git a/modules/ROOT/images/delete-relationship.png b/modules/ROOT/images/delete-relationship.png new file mode 100644 index 000000000..7f4704a28 Binary files /dev/null and b/modules/ROOT/images/delete-relationship.png differ diff --git a/modules/ROOT/images/develop.png b/modules/ROOT/images/develop.png new file mode 100644 index 000000000..fb7d4aa49 Binary files /dev/null and b/modules/ROOT/images/develop.png differ diff --git a/modules/ROOT/images/di-ui.png b/modules/ROOT/images/di-ui.png new file mode 100644 index 000000000..0e6374b3e Binary files /dev/null and b/modules/ROOT/images/di-ui.png differ diff --git a/modules/ROOT/images/dismiss-single-nodes.png b/modules/ROOT/images/dismiss-single-nodes.png new file mode 100644 index 000000000..effc39352 Binary files /dev/null and b/modules/ROOT/images/dismiss-single-nodes.png differ diff --git a/modules/ROOT/images/dropdown.png b/modules/ROOT/images/dropdown.png new file mode 100644 index 000000000..874f6504f Binary files /dev/null and b/modules/ROOT/images/dropdown.png differ diff --git a/modules/ROOT/images/edit-label.png b/modules/ROOT/images/edit-label.png new file mode 100644 index 000000000..2029b7873 Binary files /dev/null and b/modules/ROOT/images/edit-label.png differ diff --git a/modules/ROOT/images/edit-properties.png b/modules/ROOT/images/edit-properties.png new file mode 100644 index 000000000..d8f533437 Binary files /dev/null and b/modules/ROOT/images/edit-properties.png differ diff --git a/modules/ROOT/images/emptyexplore.png b/modules/ROOT/images/emptyexplore.png new file mode 100644 index 000000000..173f4523c Binary files /dev/null and b/modules/ROOT/images/emptyexplore.png differ diff --git a/modules/ROOT/images/emptyquery.png b/modules/ROOT/images/emptyquery.png new file mode 100644 index 000000000..a427d6da0 Binary files /dev/null and b/modules/ROOT/images/emptyquery.png differ diff --git a/modules/ROOT/images/expand-nodes.png b/modules/ROOT/images/expand-nodes.png new file mode 100644 index 000000000..5101119fd Binary files /dev/null and b/modules/ROOT/images/expand-nodes.png differ diff --git a/modules/ROOT/images/expandedresources.png b/modules/ROOT/images/expandedresources.png new file mode 100644 index 000000000..80ccc0bd0 Binary files /dev/null and b/modules/ROOT/images/expandedresources.png differ diff --git a/modules/ROOT/images/explore-overview.png b/modules/ROOT/images/explore-overview.png new file mode 100644 index 000000000..1a0af7e73 Binary files /dev/null and b/modules/ROOT/images/explore-overview.png differ diff --git a/modules/ROOT/images/explore.png b/modules/ROOT/images/explore.png new file mode 100644 index 000000000..02abc7e9f Binary files /dev/null and b/modules/ROOT/images/explore.png differ diff --git a/modules/ROOT/images/file-filtering.png b/modules/ROOT/images/file-filtering.png new file mode 100644 index 000000000..4fcf1493d Binary files /dev/null and b/modules/ROOT/images/file-filtering.png differ diff --git a/modules/ROOT/images/files.png b/modules/ROOT/images/files.png new file mode 100644 index 000000000..35dc79b23 Binary files /dev/null and b/modules/ROOT/images/files.png differ diff --git a/modules/ROOT/images/filtering-dismiss.png b/modules/ROOT/images/filtering-dismiss.png new file mode 100644 index 000000000..c6f22b25c Binary files /dev/null and b/modules/ROOT/images/filtering-dismiss.png differ diff --git a/modules/ROOT/images/filtering-histogram.png b/modules/ROOT/images/filtering-histogram.png new file mode 100644 index 000000000..da9b68f07 Binary files /dev/null and b/modules/ROOT/images/filtering-histogram.png differ diff --git a/modules/ROOT/images/full-text-search.jpg b/modules/ROOT/images/full-text-search.jpg new file mode 100644 index 000000000..1b6a03cce Binary files /dev/null and b/modules/ROOT/images/full-text-search.jpg differ diff --git a/modules/ROOT/images/graph-result-frame.png b/modules/ROOT/images/graph-result-frame.png new file mode 100644 index 000000000..2d6b29592 Binary files /dev/null and b/modules/ROOT/images/graph-result-frame.png differ diff --git a/modules/ROOT/images/icon-add.png b/modules/ROOT/images/icon-add.png new file mode 100644 index 000000000..2bd6bfe27 Binary files /dev/null and b/modules/ROOT/images/icon-add.png differ diff --git a/modules/ROOT/images/icon-clear.png b/modules/ROOT/images/icon-clear.png new file mode 100644 index 000000000..0cdea3217 Binary files /dev/null and b/modules/ROOT/images/icon-clear.png differ diff --git a/modules/ROOT/images/icon-dismiss.png b/modules/ROOT/images/icon-dismiss.png new file mode 100644 index 000000000..20680b2f9 Binary files /dev/null and b/modules/ROOT/images/icon-dismiss.png differ diff --git a/modules/ROOT/images/icon-duplicate.png b/modules/ROOT/images/icon-duplicate.png new file mode 100644 index 000000000..295df2273 Binary files /dev/null and b/modules/ROOT/images/icon-duplicate.png differ diff --git a/modules/ROOT/images/icon-expand-reveal.png b/modules/ROOT/images/icon-expand-reveal.png new file mode 100644 index 000000000..1f9ad891f Binary files /dev/null and b/modules/ROOT/images/icon-expand-reveal.png differ diff --git a/modules/ROOT/images/icon-fit-selection.png b/modules/ROOT/images/icon-fit-selection.png new file mode 100644 index 000000000..cfd00c7be Binary files /dev/null and b/modules/ROOT/images/icon-fit-selection.png differ diff --git a/modules/ROOT/images/icon-invert.png b/modules/ROOT/images/icon-invert.png new file mode 100644 index 000000000..54906d594 Binary files /dev/null and b/modules/ROOT/images/icon-invert.png differ diff --git a/modules/ROOT/images/icon-jumpto.png b/modules/ROOT/images/icon-jumpto.png new file mode 100644 index 000000000..32461f762 Binary files /dev/null and b/modules/ROOT/images/icon-jumpto.png differ diff --git a/modules/ROOT/images/icon-magnifying-glass.png b/modules/ROOT/images/icon-magnifying-glass.png new file mode 100644 index 000000000..fae493ebb Binary files /dev/null and b/modules/ROOT/images/icon-magnifying-glass.png differ diff --git a/modules/ROOT/images/icon-path.png b/modules/ROOT/images/icon-path.png new file mode 100644 index 000000000..b06a5171d Binary files /dev/null and b/modules/ROOT/images/icon-path.png differ diff --git a/modules/ROOT/images/icon-pencil.png b/modules/ROOT/images/icon-pencil.png new file mode 100644 index 000000000..b857c536f Binary files /dev/null and b/modules/ROOT/images/icon-pencil.png differ diff --git a/modules/ROOT/images/icon-redo.png b/modules/ROOT/images/icon-redo.png new file mode 100644 index 000000000..b492af1fd Binary files /dev/null and b/modules/ROOT/images/icon-redo.png differ diff --git a/modules/ROOT/images/icon-undo.png b/modules/ROOT/images/icon-undo.png new file mode 100644 index 000000000..46bf2c150 Binary files /dev/null and b/modules/ROOT/images/icon-undo.png differ diff --git a/modules/ROOT/images/image22.png b/modules/ROOT/images/image22.png new file mode 100644 index 000000000..919b40807 Binary files /dev/null and b/modules/ROOT/images/image22.png differ diff --git a/modules/ROOT/images/instanceactions.png b/modules/ROOT/images/instanceactions.png new file mode 100644 index 000000000..5b4558f2c Binary files /dev/null and b/modules/ROOT/images/instanceactions.png differ diff --git a/modules/ROOT/images/instancedetails.png b/modules/ROOT/images/instancedetails.png new file mode 100644 index 000000000..a2a162bb0 Binary files /dev/null and b/modules/ROOT/images/instancedetails.png differ diff --git a/modules/ROOT/images/instancedetailsexpanded.png b/modules/ROOT/images/instancedetailsexpanded.png new file mode 100644 index 000000000..11044d162 Binary files /dev/null and b/modules/ROOT/images/instancedetailsexpanded.png differ diff --git a/modules/ROOT/images/instanceemptystate.png b/modules/ROOT/images/instanceemptystate.png new file mode 100644 index 000000000..6b51256ce Binary files /dev/null and b/modules/ROOT/images/instanceemptystate.png differ diff --git a/modules/ROOT/images/instances.png b/modules/ROOT/images/instances.png new file mode 100644 index 000000000..389bcf9d0 Binary files /dev/null and b/modules/ROOT/images/instances.png differ diff --git a/modules/ROOT/images/inviteusers.png b/modules/ROOT/images/inviteusers.png new file mode 100644 index 000000000..761422331 Binary files /dev/null and b/modules/ROOT/images/inviteusers.png differ diff --git a/modules/ROOT/images/lasso-tool.png b/modules/ROOT/images/lasso-tool.png new file mode 100644 index 000000000..1254b10f1 Binary files /dev/null and b/modules/ROOT/images/lasso-tool.png differ diff --git a/modules/ROOT/images/layouts-hierarchy.png b/modules/ROOT/images/layouts-hierarchy.png new file mode 100644 index 000000000..f211d1b09 Binary files /dev/null and b/modules/ROOT/images/layouts-hierarchy.png differ diff --git a/modules/ROOT/images/leftsidepanel.png b/modules/ROOT/images/leftsidepanel.png new file mode 100644 index 000000000..d7ce0221a Binary files /dev/null and b/modules/ROOT/images/leftsidepanel.png differ diff --git a/modules/ROOT/images/legend-panel-intro.png b/modules/ROOT/images/legend-panel-intro.png new file mode 100644 index 000000000..8eb024b69 Binary files /dev/null and b/modules/ROOT/images/legend-panel-intro.png differ diff --git a/modules/ROOT/images/louvain.png b/modules/ROOT/images/louvain.png new file mode 100644 index 000000000..bf8361db0 Binary files /dev/null and b/modules/ROOT/images/louvain.png differ diff --git a/modules/ROOT/images/map.png b/modules/ROOT/images/map.png new file mode 100644 index 000000000..6fbe98ac9 Binary files /dev/null and b/modules/ROOT/images/map.png differ diff --git a/modules/ROOT/images/metrics.png b/modules/ROOT/images/metrics.png new file mode 100644 index 000000000..1caa89af4 Binary files /dev/null and b/modules/ROOT/images/metrics.png differ diff --git a/modules/ROOT/images/model-panel.png b/modules/ROOT/images/model-panel.png new file mode 100644 index 000000000..cbb45b50b Binary files /dev/null and b/modules/ROOT/images/model-panel.png differ diff --git a/modules/ROOT/images/moreinfo.png b/modules/ROOT/images/moreinfo.png new file mode 100644 index 000000000..26039c526 Binary files /dev/null and b/modules/ROOT/images/moreinfo.png differ diff --git a/modules/ROOT/images/newinstance.png b/modules/ROOT/images/newinstance.png new file mode 100644 index 000000000..e8f6ed5d3 Binary files /dev/null and b/modules/ROOT/images/newinstance.png differ diff --git a/modules/ROOT/images/node-exclude.png b/modules/ROOT/images/node-exclude.png new file mode 100644 index 000000000..c6a1f829f Binary files /dev/null and b/modules/ROOT/images/node-exclude.png differ diff --git a/modules/ROOT/images/node-id.png b/modules/ROOT/images/node-id.png new file mode 100644 index 000000000..45c48bea4 Binary files /dev/null and b/modules/ROOT/images/node-id.png differ diff --git a/modules/ROOT/images/node-inspector.png b/modules/ROOT/images/node-inspector.png new file mode 100644 index 000000000..226f0ab91 Binary files /dev/null and b/modules/ROOT/images/node-inspector.png differ diff --git a/modules/ROOT/images/node-mapping.png b/modules/ROOT/images/node-mapping.png new file mode 100644 index 000000000..12a042ef2 Binary files /dev/null and b/modules/ROOT/images/node-mapping.png differ diff --git a/modules/ROOT/images/node-relationship.png b/modules/ROOT/images/node-relationship.png new file mode 100644 index 000000000..ff1d8b9bc Binary files /dev/null and b/modules/ROOT/images/node-relationship.png differ diff --git a/modules/ROOT/images/node-styling.png b/modules/ROOT/images/node-styling.png new file mode 100644 index 000000000..097c8bc65 Binary files /dev/null and b/modules/ROOT/images/node-styling.png differ diff --git a/modules/ROOT/images/northwind-as-a-graph.png b/modules/ROOT/images/northwind-as-a-graph.png new file mode 100644 index 000000000..602182bbd Binary files /dev/null and b/modules/ROOT/images/northwind-as-a-graph.png differ diff --git a/modules/ROOT/images/northwind-customer-perspective.png b/modules/ROOT/images/northwind-customer-perspective.png new file mode 100644 index 000000000..bbeddbee9 Binary files /dev/null and b/modules/ROOT/images/northwind-customer-perspective.png differ diff --git a/modules/ROOT/images/northwind-purchasing-perspective.png b/modules/ROOT/images/northwind-purchasing-perspective.png new file mode 100644 index 000000000..a531ddb14 Binary files /dev/null and b/modules/ROOT/images/northwind-purchasing-perspective.png differ diff --git a/modules/ROOT/images/northwind-sales-perspective.png b/modules/ROOT/images/northwind-sales-perspective.png new file mode 100644 index 000000000..c59581bcc Binary files /dev/null and b/modules/ROOT/images/northwind-sales-perspective.png differ diff --git a/modules/ROOT/images/northwind-shipping-perspective.png b/modules/ROOT/images/northwind-shipping-perspective.png new file mode 100644 index 000000000..00a5c660f Binary files /dev/null and b/modules/ROOT/images/northwind-shipping-perspective.png differ diff --git a/modules/ROOT/images/organization.png b/modules/ROOT/images/organization.png new file mode 100644 index 000000000..fca97980a Binary files /dev/null and b/modules/ROOT/images/organization.png differ diff --git a/modules/ROOT/images/parameter-chaining.png b/modules/ROOT/images/parameter-chaining.png new file mode 100644 index 000000000..28a6b76f2 Binary files /dev/null and b/modules/ROOT/images/parameter-chaining.png differ diff --git a/modules/ROOT/images/parameterized-search-phrase.png b/modules/ROOT/images/parameterized-search-phrase.png new file mode 100644 index 000000000..2cf58fc57 Binary files /dev/null and b/modules/ROOT/images/parameterized-search-phrase.png differ diff --git a/modules/ROOT/images/params-assist.png b/modules/ROOT/images/params-assist.png new file mode 100644 index 000000000..2f778e40c Binary files /dev/null and b/modules/ROOT/images/params-assist.png differ diff --git a/modules/ROOT/images/password.png b/modules/ROOT/images/password.png new file mode 100644 index 000000000..cba17f59e Binary files /dev/null and b/modules/ROOT/images/password.png differ diff --git a/modules/ROOT/images/perspective-components.png b/modules/ROOT/images/perspective-components.png new file mode 100644 index 000000000..a205d70a0 Binary files /dev/null and b/modules/ROOT/images/perspective-components.png differ diff --git a/modules/ROOT/images/perspective-creation.png b/modules/ROOT/images/perspective-creation.png new file mode 100644 index 000000000..0ec55c2e9 Binary files /dev/null and b/modules/ROOT/images/perspective-creation.png differ diff --git a/modules/ROOT/images/perspective-drawer.png b/modules/ROOT/images/perspective-drawer.png new file mode 100644 index 000000000..cbad51bf3 Binary files /dev/null and b/modules/ROOT/images/perspective-drawer.png differ diff --git a/modules/ROOT/images/perspective-export-import.png b/modules/ROOT/images/perspective-export-import.png new file mode 100644 index 000000000..47285552f Binary files /dev/null and b/modules/ROOT/images/perspective-export-import.png differ diff --git a/modules/ROOT/images/perspective-refresh-magnified.png b/modules/ROOT/images/perspective-refresh-magnified.png new file mode 100644 index 000000000..6f77ad276 Binary files /dev/null and b/modules/ROOT/images/perspective-refresh-magnified.png differ diff --git a/modules/ROOT/images/playback.png b/modules/ROOT/images/playback.png new file mode 100644 index 000000000..1dcb7929f Binary files /dev/null and b/modules/ROOT/images/playback.png differ diff --git a/modules/ROOT/images/proactive-blank-input.png b/modules/ROOT/images/proactive-blank-input.png new file mode 100644 index 000000000..972ed50d0 Binary files /dev/null and b/modules/ROOT/images/proactive-blank-input.png differ diff --git a/modules/ROOT/images/proactive-product-selected.png b/modules/ROOT/images/proactive-product-selected.png new file mode 100644 index 000000000..85d4d216e Binary files /dev/null and b/modules/ROOT/images/proactive-product-selected.png differ diff --git a/modules/ROOT/images/project.png b/modules/ROOT/images/project.png new file mode 100644 index 000000000..fa3764ac9 Binary files /dev/null and b/modules/ROOT/images/project.png differ diff --git a/modules/ROOT/images/projectsettings.png b/modules/ROOT/images/projectsettings.png new file mode 100644 index 000000000..26391e061 Binary files /dev/null and b/modules/ROOT/images/projectsettings.png differ diff --git a/modules/ROOT/images/property-key-refresh.png b/modules/ROOT/images/property-key-refresh.png new file mode 100644 index 000000000..363cabd36 Binary files /dev/null and b/modules/ROOT/images/property-key-refresh.png differ diff --git a/modules/ROOT/images/query-connected-dropdown.png b/modules/ROOT/images/query-connected-dropdown.png new file mode 100644 index 000000000..98bb31668 Binary files /dev/null and b/modules/ROOT/images/query-connected-dropdown.png differ diff --git a/modules/ROOT/images/query-connection-dropdown.png b/modules/ROOT/images/query-connection-dropdown.png new file mode 100644 index 000000000..53ddc31d9 Binary files /dev/null and b/modules/ROOT/images/query-connection-dropdown.png differ diff --git a/modules/ROOT/images/query-limit.png b/modules/ROOT/images/query-limit.png new file mode 100644 index 000000000..9b12ac653 Binary files /dev/null and b/modules/ROOT/images/query-limit.png differ diff --git a/modules/ROOT/images/query-styling.png b/modules/ROOT/images/query-styling.png new file mode 100644 index 000000000..a72bc81e9 Binary files /dev/null and b/modules/ROOT/images/query-styling.png differ diff --git a/modules/ROOT/images/query.png b/modules/ROOT/images/query.png new file mode 100644 index 000000000..4c3111217 Binary files /dev/null and b/modules/ROOT/images/query.png differ diff --git a/modules/ROOT/images/raw.png b/modules/ROOT/images/raw.png new file mode 100644 index 000000000..4c9eb77d7 Binary files /dev/null and b/modules/ROOT/images/raw.png differ diff --git a/modules/ROOT/images/refresh-data.png b/modules/ROOT/images/refresh-data.png new file mode 100644 index 000000000..ab1dfa815 Binary files /dev/null and b/modules/ROOT/images/refresh-data.png differ diff --git a/modules/ROOT/images/relationship-mapping.png b/modules/ROOT/images/relationship-mapping.png new file mode 100644 index 000000000..353d68759 Binary files /dev/null and b/modules/ROOT/images/relationship-mapping.png differ diff --git a/modules/ROOT/images/relationship-styling.png b/modules/ROOT/images/relationship-styling.png new file mode 100644 index 000000000..421238b7b Binary files /dev/null and b/modules/ROOT/images/relationship-styling.png differ diff --git a/modules/ROOT/images/relationship.png b/modules/ROOT/images/relationship.png new file mode 100644 index 000000000..4fb0c561d Binary files /dev/null and b/modules/ROOT/images/relationship.png differ diff --git a/modules/ROOT/images/relationships-of-a-node.png b/modules/ROOT/images/relationships-of-a-node.png new file mode 100644 index 000000000..af286efd9 Binary files /dev/null and b/modules/ROOT/images/relationships-of-a-node.png differ diff --git a/modules/ROOT/images/reveal-relationships.png b/modules/ROOT/images/reveal-relationships.png new file mode 100644 index 000000000..41440444d Binary files /dev/null and b/modules/ROOT/images/reveal-relationships.png differ diff --git a/modules/ROOT/images/roles1.png b/modules/ROOT/images/roles1.png new file mode 100644 index 000000000..a39bff67f Binary files /dev/null and b/modules/ROOT/images/roles1.png differ diff --git a/modules/ROOT/images/roles2.png b/modules/ROOT/images/roles2.png new file mode 100644 index 000000000..9fe1a3e22 Binary files /dev/null and b/modules/ROOT/images/roles2.png differ diff --git a/modules/ROOT/images/rule-based-styling-range.png b/modules/ROOT/images/rule-based-styling-range.png new file mode 100644 index 000000000..1b8d6eef2 Binary files /dev/null and b/modules/ROOT/images/rule-based-styling-range.png differ diff --git a/modules/ROOT/images/rule-based-styling-single.png b/modules/ROOT/images/rule-based-styling-single.png new file mode 100644 index 000000000..98c8316cf Binary files /dev/null and b/modules/ROOT/images/rule-based-styling-single.png differ diff --git a/modules/ROOT/images/rule-based-styling-unique-values.png b/modules/ROOT/images/rule-based-styling-unique-values.png new file mode 100644 index 000000000..21d9443a8 Binary files /dev/null and b/modules/ROOT/images/rule-based-styling-unique-values.png differ diff --git a/modules/ROOT/images/rule-based-time.png b/modules/ROOT/images/rule-based-time.png new file mode 100644 index 000000000..f350df814 Binary files /dev/null and b/modules/ROOT/images/rule-based-time.png differ diff --git a/modules/ROOT/images/save-cypher.png b/modules/ROOT/images/save-cypher.png new file mode 100644 index 000000000..39273656d Binary files /dev/null and b/modules/ROOT/images/save-cypher.png differ diff --git a/modules/ROOT/images/saved-cypher-drawer.png b/modules/ROOT/images/saved-cypher-drawer.png new file mode 100644 index 000000000..6eef7bcc3 Binary files /dev/null and b/modules/ROOT/images/saved-cypher-drawer.png differ diff --git a/modules/ROOT/images/scene-action-context.png b/modules/ROOT/images/scene-action-context.png new file mode 100644 index 000000000..90453b0e7 Binary files /dev/null and b/modules/ROOT/images/scene-action-context.png differ diff --git a/modules/ROOT/images/scene-action-relationship.png b/modules/ROOT/images/scene-action-relationship.png new file mode 100644 index 000000000..2f8c7ba8c Binary files /dev/null and b/modules/ROOT/images/scene-action-relationship.png differ diff --git a/modules/ROOT/images/scene-action.png b/modules/ROOT/images/scene-action.png new file mode 100644 index 000000000..9f8c41ac2 Binary files /dev/null and b/modules/ROOT/images/scene-action.png differ diff --git a/modules/ROOT/images/search-bar-5.png b/modules/ROOT/images/search-bar-5.png new file mode 100644 index 000000000..e4b30a8aa Binary files /dev/null and b/modules/ROOT/images/search-bar-5.png differ diff --git a/modules/ROOT/images/search-bar-6.png b/modules/ROOT/images/search-bar-6.png new file mode 100644 index 000000000..6cce16151 Binary files /dev/null and b/modules/ROOT/images/search-bar-6.png differ diff --git a/modules/ROOT/images/search-bar-7.png b/modules/ROOT/images/search-bar-7.png new file mode 100644 index 000000000..443d614c0 Binary files /dev/null and b/modules/ROOT/images/search-bar-7.png differ diff --git a/modules/ROOT/images/select-related-nodes.png b/modules/ROOT/images/select-related-nodes.png new file mode 100644 index 000000000..46acc5b81 Binary files /dev/null and b/modules/ROOT/images/select-related-nodes.png differ diff --git a/modules/ROOT/images/selected-values.png b/modules/ROOT/images/selected-values.png new file mode 100644 index 000000000..26b17bcb0 Binary files /dev/null and b/modules/ROOT/images/selected-values.png differ diff --git a/modules/ROOT/images/shortest-path.png b/modules/ROOT/images/shortest-path.png new file mode 100644 index 000000000..9ce07dd6a Binary files /dev/null and b/modules/ROOT/images/shortest-path.png differ diff --git a/modules/ROOT/images/show-me-a-graph.png b/modules/ROOT/images/show-me-a-graph.png new file mode 100644 index 000000000..5d63820fd Binary files /dev/null and b/modules/ROOT/images/show-me-a-graph.png differ diff --git a/modules/ROOT/images/slicer.png b/modules/ROOT/images/slicer.png new file mode 100644 index 000000000..044615599 Binary files /dev/null and b/modules/ROOT/images/slicer.png differ diff --git a/modules/ROOT/images/static-search-phrase.png b/modules/ROOT/images/static-search-phrase.png new file mode 100644 index 000000000..3a4969a62 Binary files /dev/null and b/modules/ROOT/images/static-search-phrase.png differ diff --git a/modules/ROOT/images/stream.png b/modules/ROOT/images/stream.png new file mode 100644 index 000000000..8e497985e Binary files /dev/null and b/modules/ROOT/images/stream.png differ diff --git a/modules/ROOT/images/table.png b/modules/ROOT/images/table.png new file mode 100644 index 000000000..356fa3981 Binary files /dev/null and b/modules/ROOT/images/table.png differ diff --git a/modules/ROOT/images/timezones.png b/modules/ROOT/images/timezones.png new file mode 100644 index 000000000..fb20af05d Binary files /dev/null and b/modules/ROOT/images/timezones.png differ diff --git a/modules/ROOT/images/tools.png b/modules/ROOT/images/tools.png new file mode 100644 index 000000000..f6e1d018b Binary files /dev/null and b/modules/ROOT/images/tools.png differ diff --git a/modules/ROOT/images/tooltip-node-2.png b/modules/ROOT/images/tooltip-node-2.png new file mode 100644 index 000000000..82d530f42 Binary files /dev/null and b/modules/ROOT/images/tooltip-node-2.png differ diff --git a/modules/ROOT/images/upx-import.png b/modules/ROOT/images/upx-import.png new file mode 100644 index 000000000..15fa569e0 Binary files /dev/null and b/modules/ROOT/images/upx-import.png differ diff --git a/modules/ROOT/images/upx-query.png b/modules/ROOT/images/upx-query.png new file mode 100644 index 000000000..e9d5bbefb Binary files /dev/null and b/modules/ROOT/images/upx-query.png differ diff --git a/modules/ROOT/images/users.png b/modules/ROOT/images/users.png new file mode 100644 index 000000000..a5e72d803 Binary files /dev/null and b/modules/ROOT/images/users.png differ diff --git a/modules/ROOT/images/whiteboardfriendly.png b/modules/ROOT/images/whiteboardfriendly.png new file mode 100644 index 000000000..29ea76275 Binary files /dev/null and b/modules/ROOT/images/whiteboardfriendly.png differ diff --git a/modules/ROOT/pages/all-metrics.adoc b/modules/ROOT/pages/all-metrics.adoc new file mode 100644 index 000000000..873e90c33 --- /dev/null +++ b/modules/ROOT/pages/all-metrics.adoc @@ -0,0 +1,95 @@ +[[all-metrics]] += All metrics +:description: This page describes metrics + +You can get a view of instance resources from the instance card. + +You can also monitor the following metrics of an instance from the *Metrics* tab. +Then from the tabs at the top, you can navigate between resources, instance and database metrics. + +The metrics are laid out across three tabs according to their category: + +* *Resources* - Overall system resources, such as CPU, RAM and disk usage. +* *Instance* - Information about the Neo4j instance(s) running the database. +* *Database* - Metrics concerning the database itself, such as usage statistics and entity counts. + +image::metrics.png[] + +Select the info icon to see information about a particular metric, and you can expland the graph. + +image::moreinfo.png[] + +When viewing metrics, you can select from the following time intervals: + +* 6 hours +* 24 hours +* 3 days +* 7 days +* 30 days + +== Chart interactions + +[NOTE] +==== +Memory and storage charts can be toggled between absolute and relative values using the *%* toggle. +==== + +=== Toggle data series + +To hide or show individual data series, select the corresponding data series in the legend below the chart. + +=== Zoom + +To zoom in to a narrower time interval, select and drag inside any chart to select your desired time interval. +The data will automatically update to match the increased resolution. + +To reset zoom, double-click anywhere inside the chart or use the option in the context menu. + +=== Expand + +Any chart can be expanded to take up all the available screen estate by clicking the *expand* button (shown as two opposing arrows). +To exit this mode, click the *x* button on the expanded view. + +=== Context menu + +To access the chart context menu, select the *...* button on any chart. + +* *More info* - Selecting *More info* brings up an explanation of the particular metric. +For some metrics it also provides hints about possible actions to take if that metric falls outside the expected range. + +* *Reset zoom* - If the zoom level has been altered by selecting and dragging across a chart, *Reset zoom* resets the zoom back to the selected interval. + +== Aggregations + +Most metrics will have several values for a given timestamp because of the following reasons: + +* Multiple database replicas +* Compressing several data points into one, depending on zoom level + +Aggregating functions are used to reconcile metrics having multiple data points and make the most sense of that particular metric. +To convey an even more detailed picture of the state of the system, several aggregations can be shown. + +The possible aggregations are: + +* *Min* - The minimum value of the metric across all cluster members. +* *Max* - The maximum value of the metric across all cluster members. +* *Average* - The average value of the metric across all cluster members. +* *Sum* - The sum of the metric across all cluster members. + +== Store size metrics + +=== Resources tab + +The chart on the _Resources_ tab shows the allocated store size metric for the selected database either as a percentage of the available storage assigned for the database or as absolute values. + +=== Database tab + +The _Database_ tab provides a chart that shows the store size and the portion of the allocated space that the database is actively utilizing. +Both metrics are represented as percentages of the available storage assigned to the database. + +These metrics may differ due to the way Neo4j allocates and reuses space. +Once allocated, space is never automatically de-allocated. +Thus, reducing the data (nodes, relationships, properties) stored in the database does not reduce the top-line store size metric. +However, Neo4j will reuse this 'available' space before allocating more from the system. +The amount of allocated space that is 'available' is reported by the database, and Advanced metrics uses this metric to derive the used space by subtracting it from the allocated store size. +This information can help you understand how close your database is to exceeding the assigned storage size. \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/getting-started/connect-database.adoc b/modules/ROOT/pages/auradb/getting-started/connect-database.adoc deleted file mode 100644 index af986b6d2..000000000 --- a/modules/ROOT/pages/auradb/getting-started/connect-database.adoc +++ /dev/null @@ -1,153 +0,0 @@ -[[aura-connect-instance]] -= Connecting to an instance -:description: This page describes how to connect to an instance using Neo4j AuraDB. - -There are several different methods of connecting to an instance in Neo4j AuraDB: - -* <<_neo4j_browser>> - A browser-based interface for querying and viewing data in an instance. -* <<_neo4j_bloom>> - A graph exploration application for visually interacting with graph data. -* <<_neo4j_workspace>> - A browser-based interface used to import, visualize, and query graph data. -* <<_neo4j_desktop>> - An installable desktop application used to manage local and cloud instances. -* <<_neo4j_cypher_shell>> - A command-line tool used to run Cypher queries against a Neo4j instance. - -== Neo4j Browser - -You can query an instance using Neo4j Browser. - -To open an instance with Browser: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select the *Query* button on the instance you want to open. -. Enter the *Username* and *Password* credentials in the window that opens. -These are the same credentials you stored when xref:auradb/getting-started/create-database.adoc[creating the instance]. -. Select *Connect*. - -Once you have successfully connected, there are built-in guides you can complete to familiarize yourself with Neo4j Browser. - -For more information on using Neo4j Browser, please see the link:{neo4j-docs-base-uri}/browser-manual/[Browser manual]. - -== Neo4j Bloom - -You can explore an instance using Neo4j Bloom. - -To open an instance with Bloom: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select the *Explore* button on the instance you want to open. -. Select *Neo4j Bloom* from the dropdown menu. -. Enter the *Username* and *Password* credentials in the window that opens. -These are the same credentials you stored when xref:auradb/getting-started/create-database.adoc[creating the instance]. -. Select *Connect*. - -For more details on using Neo4j Bloom, please see the link:{neo4j-docs-base-uri}/bloom-user-guide/[Neo4j Bloom documentation]. - -[NOTE] -.Perspectives in AuraDB -==== - -Due to the nature of AuraDB's infrastructure, it is not currently possible to share Perspectives in Bloom, as the data for a given Perspective is stored in local storage in the user's web browser. - -An alternative is to export your Perspective as a JSON file and import it into another Bloom session. - -To export a Perspective: - -. Open the Bloom interface for your Neo4j AuraDB instance. -. Navigate to the _Perspectives Gallery_. -. Click on the vertical ellipsis (*...*) and select *Export*. -. Save the file to your local disk. - -You can import perspectives by clicking the blue "Import Perspective" button in the Perspective gallery. -Please note that the Perspective exposes details about your graph's schema but not the actual data within. - -For more information, see link:{neo4j-docs-base-uri}/bloom-user-guide/current/bloom-perspectives/[Bloom Perspectives]. - -*Deep links* - -As data for a given Perspective is stored in local storage in the user's web browser, if you want to access a deep link referencing perspectives, you will first need to import the perspectives into your local instance of Bloom. -==== - -== Neo4j Workspace - -Neo4j Workspace combines the functionality of Neo4j Browser, Neo4j Bloom, and Neo4j Data Importer into a single interface. - -To open an instance with Workspace: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select the *Open* button on the instance you want to open. -. Enter the *Database user* and *Password* credentials in the window that opens. -These are the same credentials you stored when xref:auradb/getting-started/create-database.adoc[creating the instance]. -. Select *Connect*. - -For more information on using Neo4j Workspace, see the https://neo4j.com/product/workspace/[Product page]. - -[NOTE] -==== -Workspace is enabled by default on AuraDB Free and AuraDB Professional instances but needs to be enabled for AuraDB Enterprise instances. -If you do not see the *Open* button on your instance, you can enable it by selecting the *Settings* cog in the top menu bar and toggling *Enable workspace*. -==== - -== Neo4j Desktop - -You can connect AuraDB instances to the Neo4j Desktop application, allowing the ability to have a single portal for interacting with all instances of Neo4j, whether local or located in the cloud. - -To connect to an instance using Neo4j Desktop: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Copy the *Connection URI* of the instance you want to connect to. The URI is below the instance status indicator. -. In Neo4j Desktop, select the *Projects* tab and select an existing project or create a new one. -. Select the *Add* dropdown and choose *Remote connection*. -. Enter a name for the instance and enter the URL from the Neo4j Aura console from the second step. -Once complete, select *Next*. -. With *Username/Password* selected, enter your credentials and select *Next*. -These are the same credentials you stored when xref:auradb/getting-started/create-database.adoc[creating the instance]. -. When available, activate the connection by clicking the *Connect* button. - -[NOTE] -==== -* Neo4j Desktop only allows 1 connection at a time to an instance (local or remote). -* Deactivating an instance in Neo4j Desktop won't shut it down or stop a remote instance - it will only temporarily close the connection to it in Neo4j Desktop. -==== - -As with other instances in Neo4j Desktop, you can install https://install.graphapp.io/[Graph Apps] for monitoring and other functionality. - -To do this, follow the same process to install the graph application you need, and open it from Neo4j Desktop or a web browser with the running and activated Neo4j AuraDB instance. - -== Neo4j Cypher Shell - -You can connect to an AuraDB instance using the Neo4j Cypher Shell command-line interface (CLI) and run Cypher commands against your instance from the command-line. - -To connect to an instance using Neo4j Cypher Shell: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Copy the *Connection URI* of the instance you want to connect to. The URI is below the instance status indicator. -. Open a terminal and navigate to the folder where you have installed Cypher Shell. -. Run the following `cypher-shell` command replacing: -* *``* with the URI you copied in step 2. -* *``* with the username for your instance. -* *``* with the password for your instance. -+ -[source, shell] ----- -./cypher-shell -a -u -p ----- - -Once connected, you can run `:help` for a list of available commands. - ----- -Available commands: - :begin Open a transaction - :commit Commit the currently open transaction - :exit Exit the logger - :help Show this help message - :history Print a list of the last commands executed - :param Set the value of a query parameter - :params Print all currently set query parameters and their values - :rollback Rollback the currently open transaction - :source Interactively executes cypher statements from a file - :use Set the active instance - -For help on a specific command type: - :help command ----- - -For more information on Cypher Shell, including how to install it, see the link:{neo4j-docs-base-uri}/operations-manual/current/tools/cypher-shell/[Cypher Shell documentation]. \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/getting-started/create-database.adoc b/modules/ROOT/pages/auradb/getting-started/create-database.adoc deleted file mode 100644 index 7d3bbf224..000000000 --- a/modules/ROOT/pages/auradb/getting-started/create-database.adoc +++ /dev/null @@ -1,113 +0,0 @@ -[[aura-create-instance]] -= Creating an instance -:description: This page describes how to create a Neo4j AuraDB instance. - -The process of creating an instance differs depending on the type. - -You can select from the options below to display the relevant process. - -[.tabbed-example] -==== -[.include-with-AuraDB-Free] -===== - -To create an *AuraDB Free* instance in Neo4j AuraDB: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select *New Instance*. -. Select *Create Free instance*. -. Copy and store the instance's *Username* and *Generated password* or download the credentials as a `.txt` file. -. Tick the confirmation checkbox, and select *Continue*. - -[NOTE] -====== -You can only create one AuraDB Free instance per account. -====== - -===== -[.include-with-AuraDB-Professional] -===== - -To create an *AuraDB Professional* instance in Neo4j AuraDB: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select *New Instance* to open the *Create an instance* page. (Additionally, you will need to select *Select Professional instance* if you have yet to create an AuraDB Free instance.) -. Select your preferred *Cloud provider* and *Region*. The region is the physical location of the instance. Set this as close to your location as possible. The closer the region is to your location, the faster the response time for any network interactions with the instance. -. Set your *Instance size*, the memory, CPU, and storage allocated to the instance. The larger the instance size, the more it costs to run. Once selected, you can see the running cost at the bottom of the page. -. Set your *Instance details*: -* *Instance Name* - The name to give the instance. This name can be whatever you like. -* *Neo4j Version* - The version of the Neo4j instance. -. Tick the *I understand* checkbox next to the running cost confirmation. -. Select *Create* when happy with your instance details and size. -. Copy and store the instance's *Username* and *Generated password* or download the credentials as a `.txt` file. -. Tick the confirmation checkbox, and select *Continue*. - -[NOTE] -====== -Aura retains some of your provisioned resources for managing your instance. -====== - -===== -[.include-with-AuraDB-Business-Critical] -===== - -[NOTE] -====== -Pay-as-you-go (PAYG) is available on all instance sizes up to 128GB. Prepaid is available from 16GB+. -====== - -To create an *AuraDB Business Critical* instance in Neo4j AuraDB: - -. Navigate to the link:https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select *New Instance* to open the *Create an instance* page. -(Additionally, you need to select *Select Business Critical instance* if you have yet to create an AuraDB Professional instance.) -. Select your preferred *Cloud provider* and *Region*. -The region is the physical location of the instance. -Set this as close to your location as possible. -The closer the region is to your location, the faster the response time for any network interactions with the instance. -. Set your *Instance size*, the memory, CPU, and storage allocated to the instance. -Once selected, you can see the running cost at the bottom of the page. -. Set your *Instance details*: -* *Instance Name* - The name of the instance. -This name can be whatever you like. -* *Neo4j Version* - The version of the Neo4j instance. -. Tick the *I understand* checkbox next to the running cost confirmation. -. Select *Create* when happy with your instance details and size. -. Copy and store the instance's *Username* and *Generated password* or download the credentials as a `.txt` file. -. Tick the confirmation checkbox, and select *Continue*. - -===== -[.include-with-AuraDB-Enterprise] -===== - -To create an *AuraDB Enterprise* instance in Neo4j AuraDB: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select *New Instance* to open the *Create an instance* page. -. Set your *Instance size*, the memory, CPU, and storage allocated to the instance. The larger the instance size, the more it costs to run. Please refer to your enterprise contract for pricing. -. Set your *Instance details*: -* *Instance Name* - The name to give the instance. This name can be whatever you like. -* *Neo4j Version* - The version of the Neo4j instance. -* *Region* - The physical location of the instance. Set this as close to your location as possible. The closer the region to your location, the faster the response time for any network interactions with the instance. -. Tick the *I understand* checkbox. -. Select *Create Instance* when happy with your instance details and size. -. Copy and store the instance's *Username* and *Generated password* or download the credentials as a `.txt` file. -. Tick the confirmation checkbox, and select *Continue*. - -[NOTE] -====== -Aura retains some of your provisioned resources for managing your instance. -====== - -===== -==== - -[NOTE] -==== -Multi-database is not currently supported within Neo4j AuraDB. -==== - - - - - diff --git a/modules/ROOT/pages/auradb/getting-started/query-database.adoc b/modules/ROOT/pages/auradb/getting-started/query-database.adoc deleted file mode 100644 index d94965fef..000000000 --- a/modules/ROOT/pages/auradb/getting-started/query-database.adoc +++ /dev/null @@ -1,12 +0,0 @@ -[[aura-query-instance]] -= Querying an instance -:description: This page describes how to query data using Cypher. - -You can query data in an AuraDB instance using Cypher. - -Cypher is the declarative graph query language created by Neo4j and can be used to query, update, and administer your AuraDB instance. - -You can run Cypher statements through Neo4j Browser and Neo4j Cypher Shell. -For more information on how to open an AuraDB instance in Browser and Cypher Shell, see xref:auradb/getting-started/connect-database.adoc[]. - -For more information on Cypher and Aura, see link:{neo4j-docs-base-uri}/cypher-manual/current/introduction/cypher_aura/[the Neo4j Cypher Manual]. \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/importing/import-database.adoc b/modules/ROOT/pages/auradb/importing/import-database.adoc deleted file mode 100644 index c69444538..000000000 --- a/modules/ROOT/pages/auradb/importing/import-database.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[[aura-importing-database]] -= Importing an existing database -:description: This page describes how to import an existing Neo4j database into an AuraDB instance. - -[NOTE] -==== -The process of importing or loading data requires you to xref:auradb/getting-started/create-database.adoc[create an AuraDB instance] beforehand. -==== - -include::partial$import-database.adoc[] diff --git a/modules/ROOT/pages/auradb/importing/importing-data.adoc b/modules/ROOT/pages/auradb/importing/importing-data.adoc deleted file mode 100644 index 6e099eaee..000000000 --- a/modules/ROOT/pages/auradb/importing/importing-data.adoc +++ /dev/null @@ -1,46 +0,0 @@ -[[aura-importing-data]] -= Importing data -:description: This page describes how to get data into a Neo4j AuraDB instance. - -[NOTE] -==== -The process of importing or loading data requires you to xref:auradb/getting-started/create-database.adoc[create an AuraDB instance] beforehand. -==== - -There are two ways you can import data from a *_.csv_* file into an AuraDB instance: - -* <<_load_csv>> - A Cypher statement that you run from Neo4j Browser or Neo4j Cypher Shell. -* <<_neo4j_data_importer>> - A visual application that you launch from the Console. - -== Load CSV - -The link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/load-csv/[`LOAD CSV`] Cypher statement can be used from within Neo4j Browser and Cypher Shell. -For instructions on how to open an AuraDB instance with Browser or Cypher Shell, see xref:auradb/getting-started/connect-database.adoc[]. - -There are some limitations to consider when using this method to load a *_.csv_* file into an AuraDB instance: - -* For security reasons, you must host your *_.csv_* file on a publicly accessible HTTP or HTTPS server. Examples of such servers include AWS signed URLs, GitHub, Google Drive, and Dropbox. - -* The `LOAD CSV` command is built to handle small to medium-sized data sets, such as anything up to 10 million nodes and relationships. You should avoid using this command for any data sets exceeding this limit. - -== Neo4j Data Importer - -Neo4j Data Importer is a UI-based tool for importing data that lets you: - -. Load data from flat files (`.csv` and `.tsv`). -. Define a graph model and map data to it. -. Import the data into an AuraDB instance. - -To load data with Neo4j Data Importer: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console^] in your browser. -. Select the *Import* button on the instance you want to open. - -Alternatively, you can access Data Importer from the *Import* tab of xref:auradb/getting-started/connect-database#_neo4j_workspace[Neo4j Workspace]. - -For more information on Neo4j Data Importer, see the link:{neo4j-docs-base-uri}/data-importer/current/[Neo4j Data Importer documentation]. - -[NOTE] -==== -You must provide your AuraDB instance password before importing from the Neo4j Data Importer. -==== \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/index.adoc b/modules/ROOT/pages/auradb/index.adoc deleted file mode 100644 index d6ab9fdac..000000000 --- a/modules/ROOT/pages/auradb/index.adoc +++ /dev/null @@ -1,27 +0,0 @@ -[[auradb]] -= Neo4j AuraDB overview -:description: This section describes how to use Neo4j AuraDB. - -Neo4j AuraDB is a fully managed cloud graph database service. - -Built to leverage relationships in data, AuraDB enables lightning-fast queries for real-time analytics and insights. -AuraDB is reliable, secure, and fully automated, enabling you to focus on building graph applications without worrying about database administration. - -== Plans - -AuraDB offers the following subscription plans: *AuraDB Free*, *AuraDB Professional*, *AuraDB Business Critical*, and *AuraDB Enterprise*. -The full list of features available in each plan is available on the link:https://neo4j.com/pricing/[Neo4j Pricing page]. - -== Updates and upgrades - -AuraDB does not have any scheduled maintenance windows. -It is designed to be always on and available, with all corrections, fixes, and upgrades automatically applied in the background. - -Releases for the Neo4j database are also deployed when they become available. -Operations are non-disruptive, and you shouldn't experience any downtime as a result. - -== Support - -For a breakdown of the support offered across plan types as well as the support holiday schedule, see the https://support.neo4j.com/s/article/360053850514-Neo4j-Aura-Customer-Support-Holiday-Schedule[Aura Support page]. - -Additionally, you can access the https://status.neo4j.io/[Aura Status page] to check the current operational status of Aura and subscribe to updates. diff --git a/modules/ROOT/pages/auradb/managing-databases/database-actions.adoc b/modules/ROOT/pages/auradb/managing-databases/database-actions.adoc deleted file mode 100644 index 5b197b386..000000000 --- a/modules/ROOT/pages/auradb/managing-databases/database-actions.adoc +++ /dev/null @@ -1,221 +0,0 @@ -[[aura-db-actions]] -= Instance actions -:description: This page describes the following instance actions - rename, resest, upgrade, resize, pause, resume, clone to a new database, clone to an existing database, or delete and instance. - -You can perform several instance actions from an AuraDB instance card on the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] homepage. - -== Rename an instance - -You can change the name of an existing instance using the *Rename* action. - -To rename an instance: - -. Select the ellipsis (*...*) button on the instance you want to rename. -. Select *Rename* from the resulting menu. -. Enter a new name for the instance. -. Select *Rename*. - -== Reset an instance - -label:AuraDB-Free[] -label:AuraDB-Professional[] - -You can clear all data in an instance using the *Reset to blank* action. - -To reset an instance: - -. Select the ellipsis (*...*) button on the instance you want to reset. -. Select *Reset to blank* from the resulting menu. -. Select *Reset*. - -== Upgrade an instance - -=== Upgrade from Free to Professional - -You can upgrade an AuraDB Free instance to an AuraDB Professional instance using the *Upgrade to Professional* action. - -Upgrading your instance clones your Free instance data to a new Professional instance, leaving your existing Free instance untouched. - -To upgrade a Free instance: - -. Select the ellipsis (*...*) button on the free instance you want to upgrade. -. Select *Upgrade to Professional* from the resulting menu. -. Set your desired settings for the new instance. For more information on AuraDB instance creation settings, see xref:auradb/getting-started/create-database.adoc[]. -. Tick the *I understand* checkbox and select *Upgrade Instance*. - -=== Upgrade from Professional to Business Critical - -You can upgrade an AuraDB Professional instance to an AuraDB Business Critical instance using the *Upgrade to Business Critical* action. - -Upgrading your instance clones your Professional instance data to a new Business Critical instance, leaving your existing Professional instance untouched. - -To upgrade a Business Critical instance: - -. Select the ellipsis (*...*) button on the free instance you want to upgrade. -. Select *Upgrade to Business Critical*. -. Set your desired settings for the new instance. -For more information on AuraDB instance creation settings, see xref:auradb/getting-started/create-database.adoc[]. -. Tick the *I understand* checkbox and select *Upgrade Instance*. - -== Resize an instance - -label:AuraDB-Professional[] -label:AuraDB-Enterprise[] -label:AuraDB-Business-Critical[] - -You can change the size of an existing instance using the *Resize* action. - -To resize an instance: - -. Select the ellipsis (*...*) button on the instance you want to resize. -. Select *Resize* from the resulting menu. -. Select the new size you want your instance to be. -. Tick the *I understand* checkbox and select *Upgrade instance*. - -An instance remains available during the resize operation. - -== Pause an instance - -label:AuraDB-Professional[] -label:AuraDB-Enterprise[] -label:AuraDB-Business-Critical[] - -[NOTE] -==== -You cannot manually pause an AuraDB Free instance; they are paused automatically after 72 hours of inactivity. footnote:[Inactivity is when you perform no queries on the instance.] -==== - -You can pause an instance when not needed and resume it at any time. - -To pause an instance: - -. Select the pause button on the instance you want to pause. -. Tick the *I understand* checkbox and select *Pause* to confirm. - -After confirming, the instance begins pausing, and a play button replaces the pause button. - -[NOTE] -==== -Paused instances run at a discounted rate compared to standard consumption, as outlined in the confirmation window. -You can pause an instance for up to 30 days, after which point AuraDB automatically resumes the instance. -==== - -=== Resume a paused instance - -To resume an instance: - -. Select the play button on the instance you want to pause. -. Tick the *I understand* checkbox and select *Resume* to confirm. - -After confirming, the instance begins resuming, which may take a few minutes. - -[WARNING] -==== -AuraDB Free instances do not automatically resume after 30 days. If an AuraDB Free instance remains paused for more than 30 days, Aura deletes the instance, and all information is lost. -==== - -== Clone an instance - -You can clone an existing instance to create a new instance with the same data. -You can clone across regions, from AuraDB to AuraDS and vice versa, and from Neo4j version 4 to Neo4j version 5. - -There are four options to clone an instance: - -* Clone to a new AuraDB instance -* Clone to an existing AuraDB instance -* Clone to a new AuraDS database -* Clone to an existing AuraDS database - -You can access all the cloning options from the ellipsis (*...*) button on the AuraDB instance. - -[NOTE] -==== -You cannot clone from a Neo4j version 5 instance to a Neo4j version 4 instance. -==== - -=== Clone to a new AuraDB instance - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To New* and then *AuraDB Professional/Business Critical/Enterprise* from the contextual menu. -. Set your desired settings for the new database. For more information on AuraDB database creation, see xref:auradb/getting-started/create-database.adoc[]. -. Check the *I understand* box and select *Clone Database*. -+ -[WARNING] -==== -Make sure that the username and password are stored safely before continuing. -Credentials cannot be recovered afterwards. -==== - -=== Clone to an existing AuraDB instance - -When you clone an instance to an existing instance, the database connection URI stays the same, but the data is replaced with the data from the cloned instance. - -[WARNING] -==== -Cloning into an existing instance will replace all existing data. -If you want to keep the current data, take a snapshot and export it. -==== - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To Existing* and then *AuraDB* from the contextual menu. -. If necessary, change the database name. -. Select the existing AuraDB database to clone to from the dropdown menu. -+ -[NOTE] -==== -Existing instances that are not large enough to clone into will not be available for selection. -In the dropdown menu, they will be grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. -==== -+ -. Check the *I understand* box and select *Clone*. - -=== Clone to a new AuraDS instance - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To New* and then *AuraDS* from the contextual menu. -. Set the desired name for the new instance. -. Check the *I understand* box and select *Clone Instance*. -+ -[WARNING] -==== -Make sure that the username and password are stored safely before continuing. -Credentials cannot be recovered afterwards. -==== - -=== Clone to an existing AuraDS instance - -When you clone an instance to an existing instance, the database connection URI stays the same, but the data is replaced with the data from the cloned instance. - -[WARNING] -==== -Cloning into an existing instance will replace all existing data. -If you want to keep the current data, take a snapshot and export it. -==== - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To Existing* and then *AuraDS* from the contextual menu. -. If necessary, change the instance name. -. Select the existing AuraDS instance to clone to from the dropdown menu. -+ -[NOTE] -==== -Existing instances that are not large enough to clone into will not be available for selection. -In the dropdown menu, they are grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. -==== -+ -. Tick the *I understand* checkbox and select *Clone*. - - -== Delete an instance - -You can delete an instance if you no longer want to be billed for it. - -To delete an instance: - -. Select the red trashcan icon on the instance you want to delete. -. Type the exact name of the instance (as instructed) to confirm your decision, and select *Destroy*. - -[WARNING] -==== -There is no way to recover data from a deleted AuraDB instance. -==== diff --git a/modules/ROOT/pages/aurads/architecture.adoc b/modules/ROOT/pages/aurads/architecture.adoc deleted file mode 100644 index 10cee950e..000000000 --- a/modules/ROOT/pages/aurads/architecture.adoc +++ /dev/null @@ -1,48 +0,0 @@ -[[architecture]] -= Architecture -:description: This page describes AuraDS architecture. -:!figure-caption: - -AuraDS makes it easy to run graph algorithms on Neo4j by integrating two main components: - -* *Neo4j Database*, where graph data are loaded and stored, and Cypher queries and all database operations (for example user management, query termination, etc.) are executed; -* *Graph Data Science*, a software component installed in the Neo4j Database, whose main purpose is to run graph algorithms on in-memory projections of Neo4j Database data. - -== Graph Data Science concepts - -Graph Data Science (GDS) includes procedures to project and manage graphs, run algorithms, and train machine learning models. - -.Graph Catalog - -The link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/[graph catalog^] is used to store and manage projected graphs via GDS procedures. - -.Algorithms - -GDS contains many link:{neo4j-docs-base-uri}/graph-data-science/current/operations-reference/algorithm-references/[graph algorithms^], invoked as Cypher procedures and run on projected graphs. - -GDS algorithms are broken down into three tiers of maturity: - -- *Alpha*: experimental algorithms that may be changed or removed at any time. Algorithms in this tier are prefixed with `gds.alpha.`. - -- *Beta*: algorithms promoted from the Alpha tier to candidates for the Production tier. Algorithms in this tier are prefixed with `gds.beta.`. - -- *Production*: algorithms that have been rigorously tested for stability and scalability. Algorithms in this tier are prefixed with `gds.`. - -.Model Catalog - -Some machine learning algorithms (for example Node Classification and GraphSage) need to use trained models in their computation. The link:{neo4j-docs-base-uri}/graph-data-science/current/model-catalog/[model catalog^] is used to store and manage named trained models. - -.Pipeline Catalog - -The link:/docs/graph-data-science/current/pipeline-catalog/pipeline-catalog/[pipeline catalog^] is used to manage machine learning pipelines. A pipeline groups together all the stages of a supported machine learning task (for example Node classification), from graph feature extraction to model training, in a single end-to-end workflow. - -== Graph data flow - -Since GDS algorithms can only run in memory, the typical data flow involves: - -. Reading the graph data from Neo4j Database -. Loading (_projecting_) the data into an in-memory graph -. Running an algorithm on a projected graph -. Writing the results back to Neo4j Database (if the algorithm runs in xref:aurads/tutorials/algorithm-modes#_write[write] mode) - -image::architecture.png[] diff --git a/modules/ROOT/pages/aurads/connecting/index.adoc b/modules/ROOT/pages/aurads/connecting/index.adoc deleted file mode 100644 index 86ffdcee1..000000000 --- a/modules/ROOT/pages/aurads/connecting/index.adoc +++ /dev/null @@ -1,5 +0,0 @@ -[[aurads-connecting]] -= Connecting to AuraDS - -Once you have xref:aurads/create-instance.adoc[created] an AuraDS instance, you can start using it with any xref:aurads/connecting/neo4j-applications.adoc[Neo4j application] or directly xref:aurads/connecting/python.adoc[from your code]. -Keep your username and password handy, as you will need them to connect to your instance. \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/connecting/neo4j-applications.adoc b/modules/ROOT/pages/aurads/connecting/neo4j-applications.adoc deleted file mode 100644 index af987278c..000000000 --- a/modules/ROOT/pages/aurads/connecting/neo4j-applications.adoc +++ /dev/null @@ -1,135 +0,0 @@ -[[aurads-access]] -= Connecting with Neo4j applications -:description: This page describes how to access an AuraDS instance through Neo4j applications. - -There are several ways to interact with and use graph data in AuraDS. - -* <<_neo4j_browser>> - A browser-based interface for querying and viewing graph data with rudimentary visualization. -* <<_neo4j_bloom>> - A graph exploration application for visually interacting with graph data. -* <<_neo4j_workspace>> - A browser-based interface used to import, visualize, and query graph data. -* <<_neo4j_desktop>> - An installable desktop application used to manage local and cloud databases. -* <<_neo4j_cypher_shell>> - A command-line tool used to run Cypher queries against a Neo4j instance. - -[TIP] -==== -*Tip:* For first-time users, we recommend using Neo4j Browser. -==== - -== Neo4j Browser - -To open an AuraDS instance with Neo4j Browser: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Select the *Query* button on the instance you want to open. -. Enter the *Username* and *Password* credentials in the Neo4j Browser window that opens. -These are the same credentials you stored when you xref:aurads/create-instance.adoc[created the instance]. -. Select *Connect*. - -Once you have successfully connected, there are built-in guides you can complete to familiarize yourself with Neo4j Browser. See the link:{neo4j-docs-base-uri}/browser-manual/[Browser manual^] for more information. - -== Neo4j Bloom - -To open an AuraDS instance with Neo4j Bloom: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Select the *Explore* button on the instance you want to open. -. Enter the *Username* and *Password* credentials in the Neo4j Browser window that opens. -These are the same credentials you stored when you xref:aurads/create-instance.adoc[created the instance]. -. Select *Connect*. - -See the link:{neo4j-docs-base-uri}/bloom-user-guide/[Neo4j Bloom documentation^] for more details. - -[NOTE] -.Perspectives in AuraDS -==== - -Due to the nature of AuraDS's infrastructure, it is not currently possible to share Perspectives in Bloom, as the data for a given Perspective is stored in local storage in the user's web browser. - -An alternative is to export your Perspective as a JSON file and import it into another Bloom session. - -To export a Perspective: - -. Open the Bloom interface for your Neo4j AuraDS instance. -. Navigate to the _Perspectives Gallery_. -. Click on the vertical ellipsis (*...*) and select *Export*. -. Save the file to your local disk. - -You can import perspectives by clicking the blue "Import Perspective" button in the Perspective gallery. -Please note that the Perspective exposes details about your graph's schema but not the actual data within. - -For more information, see link:{neo4j-docs-base-uri}/bloom-user-guide/current/bloom-perspectives/[Bloom Perspectives^]. - -*Deep links* - -As data for a given Perspective is stored in local storage in the user's web browser, if you want to access a deep link referencing perspectives, you will first need to import the perspectives into your local instance of Bloom. - -==== - -== Neo4j Workspace - -Neo4j Workspace combines the functionality of Neo4j Browser, Neo4j Bloom, and Neo4j Data Importer into a single interface. - -To open an instance with Workspace: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console] in your browser. -. Select the *Open* button on the instance you want to open. -. Enter the *Database user* and *Password* credentials in the window that opens. -These are the same credentials you stored when you xref:aurads/create-instance.adoc[created the instance]. -. Select *Connect*. - -For more information on using Neo4j Workspace, see the https://neo4j.com/product/workspace/[Product page]. - -[NOTE] -==== -Workspace is enabled by default on AuraDB Free and AuraDB Professional instances but needs to be enabled for AuraDB Enterprise instances. -If you do not see the *Open* button on your instance, you can enable it by selecting the *Settings* cog in the top menu bar and toggling *Enable workspace*. -==== - -== Neo4j Desktop - -You can connect AuraDS instances to the Neo4j Desktop application, allowing the ability to have a single portal for interacting with all instances of Neo4j, whether local or located in the cloud. - -To connect to an AuraDS instance using Neo4j Desktop: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Copy the *Connection URI* of the instance you want to connect to. The URI is in the page that opens when clicking on the instance. -. In Neo4j Desktop, select the *Projects* tab and select an existing project or create a new one. -. Select the *Add* dropdown and choose *Remote connection*. -. Enter a name for the instance and enter the URL from the Neo4j Aura console from the second step. -Once complete, select *Next*. -. With *Username/Password* selected, enter your credentials and select *Next*. -These are the same credentials you stored when you xref:aurads/create-instance.adoc[created the instance]. -. When available, activate the connection by clicking the *Connect* button. - -[NOTE] -==== -*Notes:* - -* Neo4j Desktop only allows 1 connection at a time to a database (local or remote). -* Deactivating an instance in Neo4j Desktop won't shut it down or stop a remote instance - it will only temporarily close the connection to it in Neo4j Desktop. -==== - -As with other databases in Neo4j Desktop, you can install https://install.graphapp.io/[Graph Apps^] for monitoring and other functionality. To do this, follow the same process to install the graph application you need, and open it from Neo4j Desktop or a web browser with the running and activated Neo4j AuraDS instance. - -== Neo4j Cypher Shell - -You can connect to an AuraDS instance using the Neo4j Cypher Shell command-line interface (CLI) and run Cypher commands against your instance from the command line. Refer to the link:{neo4j-docs-base-uri}/operations-manual/current/tools/cypher-shell/[Operations manual^] for instructions on how to install the Cypher Shell. - -To connect to an AuraDS instance using Neo4j Cypher Shell: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Copy the *Connection URI* of the instance you want to connect to. The URI is in the page that opens when clicking on the instance. -. Open a terminal and navigate to the folder where you have installed the Cypher Shell. -. Run the following `cypher-shell` command replacing: -* *``* with the URI you copied in step 2 -* *``* with the username for your instance -* *``* with the password for your instance -+ -[source, shell] ----- -./cypher-shell -a -u -p ----- - -Once connected, you can run `:help` for a list of available commands. - -For more information on Cypher Shell, including how to install it, see the link:{neo4j-docs-base-uri}/operations-manual/current/tools/cypher-shell/[Cypher Shell documentation^]. diff --git a/modules/ROOT/pages/aurads/connecting/python.adoc b/modules/ROOT/pages/aurads/connecting/python.adoc deleted file mode 100644 index 2007d6e72..000000000 --- a/modules/ROOT/pages/aurads/connecting/python.adoc +++ /dev/null @@ -1,265 +0,0 @@ -[[connecting-python]] -= Connecting with Python -:description: This page describes how to connect to AuraDS using Python. -:notebook-name: Connecting_with_Python_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -This tutorial shows how to interact with AuraDS using the link:{neo4j-docs-base-uri}/graph-data-science/current/python-client/[Graph Data Science (GDS) client^] or the link:{neo4j-docs-base-uri}/python-manual/current/[Python Driver^]. In the following sections you can switch between client and driver code clicking on the appropriate tab. - -A running AuraDS instance must be available along with access credentials (generated in the xref:aurads/create-instance.adoc[] section) and its connection URI (found in the instance detail page, starting with `neo4j+s://`). - -== Installation - -Both the GDS client and the Python driver can be installed using `pip`. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, shell] ----- -pip install graphdatascience ----- - -The latest stable version of the client can be found on https://pypi.org/project/graphdatascience[PyPI^]. -===== - -[.include-with-Python-driver] -===== -[source, shell] ----- -pip install neo4j ----- - -The latest stable version of the driver can be found on https://pypi.org/project/neo4j[PyPI^]. -===== -==== - -If `pip` is not available, you can try replacing it with `python -m pip` or `python3 -m pip`. - -== Import and setup - -Both the GDS client and the Python driver require the connection URI and the credentials as shown in the introduction. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -The client is imported as the `GraphDataScience` class: - -[source, python] ----- -# Client import -from graphdatascience import GraphDataScience ----- - -The `aura_ds=True` constructor argument should be used to have the recommended non-default configuration settings of the Python Driver applied automatically. - -[source, python] ----- -# Replace with the actual URI, username, and password -AURA_CONNECTION_URI = "neo4j+s://xxxxxxxx.databases.neo4j.io" -AURA_USERNAME = "neo4j" -AURA_PASSWORD = "..." - -# Client instantiation -gds = GraphDataScience( - AURA_CONNECTION_URI, - auth=(AURA_USERNAME, AURA_PASSWORD), - aura_ds=True -) ----- -===== - -[.include-with-Python-driver] -===== -The driver is imported as the `GraphDatabase` class: - -[source, python] ----- -# Driver import -from neo4j import GraphDatabase ----- - -[source, python] ----- -# Replace with the actual URI, username and password -AURA_CONNECTION_URI = "neo4j+s://xxxxxxxx.databases.neo4j.io" -AURA_USERNAME = "neo4j" -AURA_PASSWORD = "..." - -# Driver instantiation -driver = GraphDatabase.driver( - AURA_CONNECTION_URI, - auth=(AURA_USERNAME, AURA_PASSWORD) -) ----- -===== -==== - -== Running a query - -Once created, the client (or the driver) can be used to run Cypher queries and call Cypher procedures. In this example the `gds.version` procedure can be used to retrieve the version of GDS running on the instance. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python] ----- -# Call a GDS method directly -print(gds.version()) ----- -===== - -[.include-with-Python-driver] -===== -[source, python] ----- -# Cypher query -gds_version_query = """ - RETURN gds.version() AS version -""" - -# Create a driver session -with driver.session() as session: - # Use .data() to access the results array - results = session.run(gds_version_query).data() - print(results) ----- -===== -==== - -The following code retrieves all the procedures available in the library and shows the details of five of them. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python] ----- -# Assign the result of the client call to a variable -results = gds.list() - -# Print the result (a Pandas DataFrame) -print(results[:5]) ----- - -Since the result is a Pandas DataFrame, you can use methods such as `to_string` and `to_json` to pretty-print it. - -[source, python] ----- -# Print the result (a Pandas DataFrame) as a console-friendly string -print(results[:5].to_string()) ----- - -[source, python] ----- -# Print the result (a Pandas DataFrame) as a prettified JSON string -print(results[:5].to_json(orient="table", indent=2)) ----- -===== - -[.include-with-Python-driver] -===== -[source, python] ----- -# Import the json module for pretty visualization -import json - -# Cypher query -list_all_gds_procedures_query = """ - CALL gds.list() -""" - -# Create a driver session -with driver.session() as session: - # Use .data() to access the results array - results = session.run(list_all_gds_procedures_query).data() - - # Print the prettified result - print(json.dumps(results[:5], indent=2)) ----- -===== -==== - -=== Serializing Neo4j `DateTime` in JSON dumps - -In some cases the result of a procedure call may contain Neo4j `DateTime` objects. In order to serialize such objects into JSON, a default handler must be provided. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Import for the JSON helper function -from neo4j.time import DateTime - -# Helper function for serializing Neo4j DateTime in JSON dumps -def default(o): - if isinstance(o, (DateTime)): - return o.isoformat() - -# Run the graph generation algorithm -g, _ = gds.beta.graph.generate( - "example-graph", 10, 3, relationshipDistribution="POWER_LAW" -) - -# Drop the graph keeping the result of the operation, which contains -# some DateTime fields ("creationTime" and "modificationTime") -result = gds.graph.drop(g) - -# Print the result as JSON, converting the DateTime fields with -# the handler defined above -print(result.to_json(indent=2, default_handler=default)) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Import to prettify results -import json - -# Import for the JSON helper function -from neo4j.time import DateTime - -# Helper function for serializing Neo4j DateTime in JSON dumps -def default(o): - if isinstance(o, (DateTime)): - return o.isoformat() - -# Example query to run a graph generation algorithm -create_example_graph_query = """ - CALL gds.beta.graph.generate( - 'example-graph', 10, 3, {relationshipDistribution: 'POWER_LAW'} - ) -""" - -# Example query to delete a graph -delete_example_graph_query = """ - CALL gds.graph.drop('example-graph') -""" - -# Create the driver session -with driver.session() as session: - # Run the graph generation algorithm - session.run(create_example_graph_query).data() - - # Drop the generated graph keeping the result of the operation - results = session.run(delete_example_graph_query).data() - - # Prettify the results using the handler defined above - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] diff --git a/modules/ROOT/pages/aurads/create-instance.adoc b/modules/ROOT/pages/aurads/create-instance.adoc deleted file mode 100644 index 3f09a6c3b..000000000 --- a/modules/ROOT/pages/aurads/create-instance.adoc +++ /dev/null @@ -1,25 +0,0 @@ -[[aurads-create]] -= Creating an AuraDS instance -:description: This page describes how to create a Neo4j AuraDS instance. - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^]. -. Select *New instance* to open the *Create an instance* page. -. Fill up the instance details: -* *Instance Name* footnote:[In AuraDS Professional, this field becomes available after selecting the *Calculate Estimate* button.] - The name to give to the instance. A descriptive name makes it easier to find a specific instance among many. -* *Region* - The physical location of the instance. Set this as close to your location as possible. The closer the region is to your location, the faster the response time for any network interactions with the instance. -* *Number of nodes/relationships* - The estimated number of nodes and relationships that the instance should support. -. Select one or more algorithm categories from the *Which algorithms are you going to use?* section (or select *I'm not sure which algorithms to use*) to help estimate the most appropriate instance size. An overview of each algorithm category can be found link:{neo4j-docs-base-uri}/graph-data-science/current/algorithms/[here^]. -. Select *Calculate Estimate* to get an estimate of the resources needed to run the graph (memory, CPU, storage) along with the expected price. -. Select *Create* to proceed. -. Copy and store the *Username* and *Generated password* credentials to access the instance just created. Alternatively, you can download the credentials as a `.txt` file. -+ -WARNING: *Warning*: Make sure that the username and password are stored safely before continuing. Credentials cannot be recovered afterwards. -+ -. Tick the confirmation checkbox and select *Continue*. - -[NOTE] -==== -Multi-database is not supported within Neo4j AuraDS. -==== - -The process will take a few minutes to complete. Upon completion, you will be able to xref:aurads/connecting/index.adoc[connect to the instance]. diff --git a/modules/ROOT/pages/aurads/importing-data/data-importer.adoc b/modules/ROOT/pages/aurads/importing-data/data-importer.adoc deleted file mode 100644 index 34d80b797..000000000 --- a/modules/ROOT/pages/aurads/importing-data/data-importer.adoc +++ /dev/null @@ -1,25 +0,0 @@ -[[aurads-data-importer]] -= Using Neo4j Data Importer -:description: This page describes how to use Neo4j Data Importer with a Neo4j AuraDS instance. - -[NOTE] -==== -*Note:* The process of importing or loading data requires you to xref:aurads/create-instance.adoc[create an AuraDS instance] beforehand. -==== - -Neo4j Data Importer is a UI-based tool for importing data that lets you: - -. Load data from flat files (`.csv` and `.tsv`). -. Define a graph model and map data to it. -. Import the data into an AuraDS instance. - -To load data with Neo4j Data Importer: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Select the *Import* button on the instance you want to open. - -Alternatively, you can access Data Importer from the *Import* tab of xref:aurads/connecting/neo4j-applications#_neo4j_workspace[Neo4j Workspace]. - -Once you have opened Neo4j Data Importer, you can follow the built-in tutorial to learn how to use the tool. - -For more information on Neo4j Data Importer, see the link:{neo4j-docs-base-uri}/data-importer/current/[Neo4j Data Importer documentation]. \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/importing-data/import-db.adoc b/modules/ROOT/pages/aurads/importing-data/import-db.adoc deleted file mode 100644 index ceec972c5..000000000 --- a/modules/ROOT/pages/aurads/importing-data/import-db.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[[aurads-import-db]] -= Importing an existing database -:description: This page describes how to import an existing Neo4j database into an AuraDS instance. - -[NOTE] -==== -*Note:* The process of importing or loading data requires you to xref:aurads/create-instance.adoc[create an AuraDS instance] beforehand. -==== - -include::partial$import-database.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/importing-data/index.adoc b/modules/ROOT/pages/aurads/importing-data/index.adoc deleted file mode 100644 index 5a6d97aa5..000000000 --- a/modules/ROOT/pages/aurads/importing-data/index.adoc +++ /dev/null @@ -1,9 +0,0 @@ -[[aurads-importing-data]] -= Importing data - -There are several ways to import data into AuraDS: - -* Importing an xref:aurads/importing-data/import-db.adoc[existing Neo4j database] -* Using the xref:aurads/importing-data/data-importer.adoc[Data Importer] -* Using Cypher's xref:aurads/importing-data/load-csv.adoc[`LOAD CSV`] procedure -* Using the xref:aurads/tutorials/arrow-examples.adoc[Arrow Flight server] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/importing-data/load-csv.adoc b/modules/ROOT/pages/aurads/importing-data/load-csv.adoc deleted file mode 100644 index 751bae4fa..000000000 --- a/modules/ROOT/pages/aurads/importing-data/load-csv.adoc +++ /dev/null @@ -1,340 +0,0 @@ -[[aurads-load-csv]] -= Loading CSV files -:description: This page describes how to load CSV files into a Neo4j AuraDS instance. -:star: * -:notebook-name: Loading_CSV_files_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -A CSV file can be loaded into an AuraDS instance using the link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/load-csv/[`LOAD CSV`^] Cypher clause. For security reasons it is not possible to load local CSV files, which must be instead publicly accessible on HTTP or HTTPS servers such as GitHub, Google Drive, and Dropbox. Another way to make CSV files available is to upload them to a cloud bucket storage (such as Google Cloud Storage or Amazon S3) and configure the bucket as a static website. - -In this example we will load three CSV files: - -* `movies.csv`: a list of movies with their title, release year and a short description -* `people.csv`: a list of actors with their year of birth -* `actors.csv`: a list of acting roles, where actors are matched with the movies they had a role in - -WARNING: The `LOAD CSV` command is built to handle small to medium-sized data sets, such as anything up to 10 million nodes and relationships. You should avoid using this command for any data sets exceeding this limit. - -include::partial$aurads/setup.adoc[] - -== Create constraints - -Adding constraints before loading any data usually improves data loading performance. In fact, besides adding an integrity check, a unique constraint adds an index on a property at the same time, so that `MATCH` and `MERGE` operations during loading are faster. - -[WARNING] -==== -For best performance when using `MERGE` or `MATCH` with `LOAD CSV`, make sure an index or a unique constraint has been created on the property used for merging. -Read the link:{neo4j-docs-base-uri}/cypher-manual/current/constraints/[Cypher documentation] for more information on constraints. -==== - -In this example we add uniqueness constraints on both movie titles and actors' names. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Make movie titles unique -gds.run_cypher(""" - CREATE CONSTRAINT FOR (movie:Movie) REQUIRE movie.title IS UNIQUE -""") - -# Make person names unique -gds.run_cypher(""" - CREATE CONSTRAINT FOR (person:Person) REQUIRE person.name IS UNIQUE -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CREATE CONSTRAINT FOR (movie:Movie) REQUIRE movie.title IS UNIQUE; -CREATE CONSTRAINT FOR (person:Person) REQUIRE person.name IS UNIQUE; ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -movie_title_constraint = """ - CREATE CONSTRAINT FOR (movie:Movie) REQUIRE movie.title IS UNIQUE -""" - -person_name_constraint = """ - CREATE CONSTRAINT FOR (person:Person) REQUIRE person.name IS UNIQUE -""" - -# Create the driver session -with driver.session() as session: - # Make movie titles unique - session.run(movie_title_constraint).data() - # Make person names unique - session.run(person_name_constraint).data() ----- -===== -==== - -== Add nodes from CSV files - -We are now ready to load the CSV files from their URIs and create nodes from the data they contain. In the following examples, `LOAD CSV` is used with `WITH HEADERS` to access `row` fields by their corresponding column name. Furthermore: - -* `MERGE` is used with the indexed properties to take advantage of the constraints created in the <<_create_constraints>> section. -* `ON CREATE SET` is used to set the value of a node property when a new one is created. -* `RETURN count({star})` is used to show the number of processed rows. - -Note that the CSV files in this example are curated, so some assumptions are made for simplicity. In a real-world scenario, for example, a CSV file could contain multiple rows that would attempt to assign different property values to the same node; in this case, an link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/merge/#merge-merge-with-on-match[`ON MATCH SET`^] clause must be added to ensure this case is dealt with appropriately. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -gds.run_cypher(""" - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/movies.csv' AS row - MERGE (m:Movie {title: row.title}) - ON CREATE SET m.released = toInteger(row.released), m.tagline = row.tagline - RETURN count({star}) -""") - -gds.run_cypher(""" - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/people.csv' AS row - MERGE (p:Person {name: row.name}) - ON CREATE SET p.born = toInteger(row.born) - RETURN count({star}) -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/movies.csv' AS row -MERGE (m:Movie {title: row.title}) - ON CREATE SET m.released = toInteger(row.released), m.tagline = row.tagline -RETURN count({star}); - -LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/people.csv' AS row -MERGE (p:Person {name: row.name}) - ON CREATE SET p.born = toInteger(row.born) -RETURN count({star}); ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -load_movies_csv = """ - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/movies.csv' AS row - MERGE (m:Movie {title: row.title}) - ON CREATE SET m.released = toInteger(row.released), m.tagline = row.tagline - RETURN count({star}) -""" - -load_people_csv = """ - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/people.csv' AS row - MERGE (p:Person {name: row.name}) - ON CREATE SET p.born = toInteger(row.born) - RETURN count({star}) -""" - -# Create the driver session -with driver.session() as session: - # Load the CSV files - session.run(load_movies_csv).data() - session.run(load_people_csv).data() ----- -===== -==== - -== Add relationships from CSV files - -Similarly to what we have done for nodes, we now create relationships from the `actors.csv` file. -In the following example, `LOAD CSV` is used with the `WITH HEADERS` option to access the fields in each `row` by their corresponding column name. - -[TIP] -==== -The default field delimiter for `LOAD CSV` is the comma (`,`). -Use the link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/load-csv/#load-csv-import-data-from-a-csv-file-with-a-custom-field-delimiter[`FIELDTERMINATOR` option] to set a different delimiter. - -If the CSV file is large, use the link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/load-csv/#load-csv-importing-large-amounts-of-data[`CALL IN TRANSACTIONS` clause] to commit a number of rows per transaction instead of the whole file. -==== - -Furthermore: - -* `MATCH` and `MERGE` are used to find nodes (taking advantage of the constraints created in the <<_create_constraints>> section) and create a relationship between them. -* `ON CREATE SET` is used to set the value of a relationship property when a new one is created. -* `RETURN count({star})` is used to show the number of processed rows. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -gds.run_cypher(""" - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/actors.csv' AS row - MATCH (p:Person {name: row.person}) - MATCH (m:Movie {title: row.movie}) - MERGE (p)-[actedIn:ACTED_IN]->(m) - ON CREATE SET actedIn.roles = split(row.roles, ';') - RETURN count({star}) -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/actors.csv' AS row -MATCH (p:Person {name: row.person}) -MATCH (m:Movie {title: row.movie}) -MERGE (p)-[actedIn:ACTED_IN]->(m) - ON CREATE SET actedIn.roles = split(row.roles, ';') -RETURN count({star}) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -load_actors_csv = """ - LOAD CSV - WITH HEADERS - FROM 'https://data.neo4j.com/intro/movies/actors.csv' AS row - MATCH (p:Person {name: row.person}) - MATCH (m:Movie {title: row.movie}) - MERGE (p)-[actedIn:ACTED_IN]->(m) - ON CREATE SET actedIn.roles = split(row.roles, ';') - RETURN count({star}) -""" - -# Create the driver session -with driver.session() as session: - # Load the CSV file - session.run(load_actors_csv).data() ----- -===== -==== - -== Run a Cypher query - -Once all the nodes and relationships have been created, we can run a query to check that the data have been inserted correctly. The following query looks for movies with `Keanu Reeves`, orders them by release date and groups their titles. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -gds.run_cypher(""" - MATCH (person:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie) - RETURN movie.released, COLLECT(movie.title) AS movies - ORDER BY movie.released -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -MATCH (person:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie) -RETURN movie.released, COLLECT(movie.title) AS movies -ORDER BY movie.released ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -query = """ - MATCH (person:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie) - RETURN movie.released, COLLECT(movie.title) AS movies - ORDER BY movie.released -""" - -# Create the driver session -with driver.session() as session: - # Run the Cypher query - result = session.run(query).data() - - # Print the formatted result - print(json.dumps(result, indent=2)) ----- -===== -==== - -== Cleanup - -When the data are no longer useful, the database can be cleaned up. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Delete data -gds.run_cypher(""" - MATCH (n) - DETACH DELETE n -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -MATCH (n) -DETACH DELETE n ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_data = """ - MATCH (n) - DETACH DELETE n -""" - -# Create the driver session -with driver.session() as session: - # Delete the data - session.run(delete_data).data() ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] diff --git a/modules/ROOT/pages/aurads/importing-data/spark.adoc b/modules/ROOT/pages/aurads/importing-data/spark.adoc deleted file mode 100644 index 47cdd04d9..000000000 --- a/modules/ROOT/pages/aurads/importing-data/spark.adoc +++ /dev/null @@ -1,5 +0,0 @@ -[[aurads-import-from-spark]] -= Importing data from Spark -:description: This page describes how import data from Spark into a Neo4j AuraDS instance. - -WARNING: Provisional page. To be reviewed for content and UI. diff --git a/modules/ROOT/pages/aurads/index.adoc b/modules/ROOT/pages/aurads/index.adoc deleted file mode 100644 index bdfece984..000000000 --- a/modules/ROOT/pages/aurads/index.adoc +++ /dev/null @@ -1,30 +0,0 @@ -[[aurads]] -= Neo4j AuraDS overview -:description: This section introduces Neo4j AuraDS. -:check-mark: icon:check[] -:table-caption!: - -AuraDS is the fully managed version of Neo4j Graph Data Science. - -AuraDS instances: - -* are automatically upgraded and patched; -* can be seamlessly scaled up or down; -* can be paused to reduce costs. - -== Plans - -AuraDS offers the *AuraDS Professional* and *AuraDS Enterprise* subscription plans. -The full list of features for each plan is available on the link:https://neo4j.com/pricing/#graph-data-science[Neo4j Pricing page]. - -== Updates and upgrades - -AuraDS updates and upgrades are handled by the platform, and as such do not require user intervention. Security patches and new versions of GDS and Neo4j are installed within short time windows during which the affected instances are unavailable. - -The operations are non-destructive, so graph projections, models, and data present on an instance are not affected. No operation is applied until all the running GDS algorithms have completed. - -== Support - -For a breakdown of the support offered across plan types as well as the support holiday schedule, see the https://aura.support.neo4j.com/hc/en-us/articles/360053850514[Aura Support page]. - -Additionally, you can access the https://status.neo4j.io/[Aura Status page] to check the current operational status of Aura and subscribe to updates. \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/managing-instances/advanced-metrics.adoc b/modules/ROOT/pages/aurads/managing-instances/advanced-metrics.adoc deleted file mode 100644 index 0582bcc56..000000000 --- a/modules/ROOT/pages/aurads/managing-instances/advanced-metrics.adoc +++ /dev/null @@ -1,55 +0,0 @@ -[[aura-monitoring]] -= Advanced metrics - -Advanced metrics is a feature that enables access to a broad range of different instance and database metrics. - -To access *Advanced metrics*: - -. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. -. Select the instance you want to access. -. Select the *Metrics* tab. -. Select the *Advanced metrics* button. - -The presented metrics will be laid out across three tabs according to their category: - -* *Resources* - Overall system resources, such as CPU, RAM and disk usage. -* *Instance* - Information about the Neo4j instance(s) running the database. -* *Database* - Metrics concerning the database itself, such as usage statistics and entity counts. - -When viewing metrics, you can select from the following time intervals: - -* 30 minutes -* 6 hours -* 24 hours -* 3 days -* 7 days -* 14 days -* 30 days - -== Chart interactions - -[NOTE] -==== -Memory and storage charts can be toggled between absolute and relative values using the *%* toggle. -==== - -=== Zoom - -To zoom in to a narrower time interval, select and drag inside any chart to select your desired time interval. -The data will automatically update to match the increased resolution. - -To reset zoom, double-click anywhere inside the chart or use the option in the context menu. - -=== Expand - -Any chart can be expanded to take up all the available screen estate by clicking the *expand* button (shown as two opposing arrows). -To exit this mode, click the *x* button on the expanded view. - -=== Context menu - -To access the chart context menu, select the *...* button on any chart. - -* *More info* - Selecting *More info* brings up an explanation of the particular metric. -For some metrics it also provides hints about possible actions to take if that metric falls outside the expected range. - -* *Reset zoom* - If the zoom level has been altered by selecting and dragging across a chart, *Reset zoom* resets the zoom back to the selected interval. diff --git a/modules/ROOT/pages/aurads/managing-instances/backup-restore-export.adoc b/modules/ROOT/pages/aurads/managing-instances/backup-restore-export.adoc deleted file mode 100644 index e6f2f83ae..000000000 --- a/modules/ROOT/pages/aurads/managing-instances/backup-restore-export.adoc +++ /dev/null @@ -1,51 +0,0 @@ -[[aurads-backup-restore-export]] -= Backup, export, and restore -:description: This page describes how to backup, export and restore your data from a snapshot. - -The data in your AuraDS instance can be backed up, exported, and restored using _snapshots_. -A snapshot is a copy of the data in an instance at a specific point in time. - -The *Snapshots* tab within an AuraDS instance shows a list of available snapshots. -To access the *Snapshots* tab: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Select the instance you want to access. -. Select the *Snapshots* tab. - -== Snapshot types - -There are two different types of snapshot: - -* *Scheduled* - Runs when you first create an instance, when changes to the underlying system occur (for example, a new patch release), and automatically once a day. -* *On-demand* - Runs when you select *Take snapshot* from the *Snapshots* tab of an instance. - -[NOTE] -==== -Scheduled daily snapshots are kept for 7 days for Professional instances and 14 days for Enterprise instances. -On-demand snapshots are kept in the system for 180 days for all instances. -==== - -== Snapshot actions - -=== Take a snapshot - -You can manually trigger an *On-demand* snapshot by selecting *Take snapshot* in the *Snapshots* tab. -The snapshot status is shown as `In progress` until the snapshot has been created; then, the `Status` becomes `Completed`. - -=== Restore - -You can restore data in your instance to a previous snapshot by selecting *Restore* next to the snapshot you want to restore. - -Restoring a snapshot requires you to confirm the action by typing RESTORE and selecting *Restore*. - -[CAUTION] -==== -Restoring a snapshot overwrites the data in your instance, replacing it with the data contained in the snapshot. -==== - -=== Backup and Export - -By selecting the ellipses (...) button next to a snapshot, you can: - -* *Export* - Download the database as a compressed file, allowing you to store a local copy and work on your data offline. The compressed archive contains a *_.dump_* file that can be imported directly or pushed to the cloud. -* *Create instance from snapshot* - Create a new AuraDS instance using the data from the snapshot. This opens a window where you can assign a name to the instance that will be created. diff --git a/modules/ROOT/pages/aurads/managing-instances/instance-actions.adoc b/modules/ROOT/pages/aurads/managing-instances/instance-actions.adoc deleted file mode 100644 index 00aa5f620..000000000 --- a/modules/ROOT/pages/aurads/managing-instances/instance-actions.adoc +++ /dev/null @@ -1,168 +0,0 @@ -[[aurads-instance-actions]] -= Instance actions -:description: This page describes the available actions for an AuraDS instance. - -You can perform several actions on an AuraDS instance from the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] homepage. - -== Renaming an instance - -You can change the name of an existing instance by using the *Rename* action. - -To rename an instance: - -. Select the ellipsis (*...*) button on the instance you want to rename. -. Select *Rename* from the resulting menu. -. Enter a new name for the instance. -. Select *Rename*. - -== Resizing an instance - -You can change the size of an existing instance by using the *Resize* action. - -To resize an instance: - -. Select the ellipsis (...) on the instance you want to resize. -. Select *Resize* from the resulting menu. -. Select the new size you want your instance to be. -. Tick the *I understand* checkbox and select *Submit*. - -An instance becomes unavailable for a short period of time during the resize operation. - -== Pausing an instance - -You can pause an instance during periods where you don't need it and resume at any time. - -To pause an instance: - -. Select the pause icon on the instance you want to pause. -. Select *Pause* to confirm. - -After confirming, the instance will begin pausing, and a *Resume* button will replace the *Pause* button. - -[NOTE] -==== -Paused instances run at a discounted rate compared to standard consumption, as outlined in the confirmation window. -You can pause an instance for up to 30 days, after which point AuraDS automatically resumes the instance. -==== - -== Resuming an instance - -To resume an instance: - -. Select the play icon on the instance you want to pause. -. Tick the *I understand* checkbox and select *Resume* to confirm. - -After confirming, the instance will begin resuming, which may take a few minutes. - -== Cloning an instance - -You can clone an existing instance to create a new instance with the same data. -You can clone across regions, from AuraDB to AuraDS and vice versa, and from Neo4j version 4 to Neo4j version 5. - -There are four options to clone an instance: - -* Clone to a new AuraDS instance -* Clone to an existing AuraDS instance -* Clone to a new AuraDB database -* Clone to an existing AuraDB database - -You can access all the cloning options from the ellipsis (*...*) button on the AuraDS instance. - -[NOTE] -==== -You cannot clone from a Neo4j version 5 instance to a Neo4j version 4 instance. -==== - -=== Clone to a new AuraDS instance - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To New* and then *AuraDS* from the contextual menu. -. Set the desired name for the new instance. -. Check the *I understand* box and select *Clone Instance*. -+ -[WARNING] -==== -Make sure that the username and password are stored safely before continuing. -Credentials cannot be recovered afterwards. -==== - -=== Clone to an existing AuraDS instance - -When you clone an instance to an existing instance, the database connection URI stays the same, but the data is replaced with the data from the cloned instance. - -[WARNING] -==== -Cloning into an existing instance will replace all existing data. -If you want to keep the current data, take a snapshot and export it. -==== - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To Existing* and then *AuraDS* from the contextual menu. -. If necessary, change the instance name. -. Select the existing AuraDS instance to clone to from the dropdown menu. -+ -[NOTE] -==== -Existing instances that are not large enough to clone into will not be available for selection. -In the dropdown menu, they are grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. -==== -+ -. Tick the *I understand* checkbox and select *Clone*. - -=== Clone to a new AuraDB instance - -[NOTE] -==== -An AuraDS instance can only be cloned to an AuraDB Professional database (not Free). -==== - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To New* and then *AuraDB* from the contextual menu. -. Set your desired settings for the new database. For more information on AuraDB database creation, see xref:auradb/getting-started/create-database.adoc[]. -. Check the *I understand* box and select *Clone Database*. -+ -[WARNING] -==== -Make sure that the username and password are stored safely before continuing. -Credentials cannot be recovered afterwards. -==== - -=== Clone to an existing AuraDB instance - -[NOTE] -==== -An AuraDS instance can only be cloned to an AuraDB Professional database (not Free). -==== - -[WARNING] -==== -Cloning into an existing instance will replace all existing data. -If you want to keep the current data, take a snapshot and export it. -==== - -. Select the ellipsis (*...*) button on the instance you want to clone. -. Select *Clone To Existing* and then *AuraDB* from the contextual menu. -. If necessary, change the database name. -. Select the existing AuraDB database to clone to from the dropdown menu. -+ -[NOTE] -==== -Existing instances that are not large enough to clone into will not be available for selection. -In the dropdown menu, they will be grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. -==== -+ -. Check the *I understand* box and select *Clone*. - -== Deleting an instance - -You can delete an instance if you no longer want to be billed for it. - -[WARNING] -==== -There is no way to recover data from a deleted AuraDS instance. -==== - -To delete an instance: - -* Select the red trashcan icon on the instance you want to delete. -* Type the exact name of the instance (as instructed) to confirm your decision, and select *Destroy*. diff --git a/modules/ROOT/pages/aurads/managing-instances/monitoring.adoc b/modules/ROOT/pages/aurads/managing-instances/monitoring.adoc deleted file mode 100644 index 55e7e68a9..000000000 --- a/modules/ROOT/pages/aurads/managing-instances/monitoring.adoc +++ /dev/null @@ -1,29 +0,0 @@ -[[aurads-monitoring]] -= Monitoring - -To access the *Metrics* tab: - -. Navigate to the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] in your browser. -. Select the name of the instance you want to access. -. Select the *Metrics* tab. - -You can monitor the following metrics of an AuraDS instance: - -* *CPU Usage (%)* - The amount of CPU used by the instance as a percentage. -* *Storage Used (%)* - The amount of disk storage space used by the instance as a percentage. -* *Heap Usage (%)* - The amount of Java Virtual Machine (JVM) memory used by the instance as a percentage. -* *Out of Memory Errors* - The number of Out of Memory (OOM) errors encountered by the instance. -* *Garbage Collection Time (%)* - The amount of time the instance spends reclaiming heap space as a percentage. - -[NOTE] -==== -More information on each metric, as well as suggestions for managing them, can be found within the *Metrics* tab itself. -==== - -When viewing metrics, you can select from the following time intervals: - -* 6 hours -* 24 hours -* 3 days -* 7 days -* 30 days \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/algorithm-modes.adoc b/modules/ROOT/pages/aurads/tutorials/algorithm-modes.adoc deleted file mode 100644 index f853156ab..000000000 --- a/modules/ROOT/pages/aurads/tutorials/algorithm-modes.adoc +++ /dev/null @@ -1,524 +0,0 @@ -[[algorithm-modes]] -= Executing the different algorithm modes -:description: This page describes how to use the different algorithm modes. -:generated-graph-size: 100 -:notebook-name: Executing_the_different_algorithm_modes_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -This example explains link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/running-algos[execution modes^] for GDS algorithms and how to use each one of them. - -include::partial$aurads/setup.adoc[] - -== Create an example graph - -We start by creating some basic graph data first. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -gds.run_cypher(""" - CREATE - (home:Page {name:'Home'}), - (about:Page {name:'About'}), - (product:Page {name:'Product'}), - (links:Page {name:'Links'}), - (a:Page {name:'Site A'}), - (b:Page {name:'Site B'}), - (c:Page {name:'Site C'}), - (d:Page {name:'Site D'}), - - (home)-[:LINKS {weight: 0.2}]->(about), - (home)-[:LINKS {weight: 0.2}]->(links), - (home)-[:LINKS {weight: 0.6}]->(product), - (about)-[:LINKS {weight: 1.0}]->(home), - (product)-[:LINKS {weight: 1.0}]->(home), - (a)-[:LINKS {weight: 1.0}]->(home), - (b)-[:LINKS {weight: 1.0}]->(home), - (c)-[:LINKS {weight: 1.0}]->(home), - (d)-[:LINKS {weight: 1.0}]->(home), - (links)-[:LINKS {weight: 0.8}]->(home), - (links)-[:LINKS {weight: 0.05}]->(a), - (links)-[:LINKS {weight: 0.05}]->(b), - (links)-[:LINKS {weight: 0.05}]->(c), - (links)-[:LINKS {weight: 0.05}]->(d) -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CREATE - (home:Page {name:'Home'}), - (about:Page {name:'About'}), - (product:Page {name:'Product'}), - (links:Page {name:'Links'}), - (a:Page {name:'Site A'}), - (b:Page {name:'Site B'}), - (c:Page {name:'Site C'}), - (d:Page {name:'Site D'}), - - (home)-[:LINKS {weight: 0.2}]->(about), - (home)-[:LINKS {weight: 0.2}]->(links), - (home)-[:LINKS {weight: 0.6}]->(product), - (about)-[:LINKS {weight: 1.0}]->(home), - (product)-[:LINKS {weight: 1.0}]->(home), - (a)-[:LINKS {weight: 1.0}]->(home), - (b)-[:LINKS {weight: 1.0}]->(home), - (c)-[:LINKS {weight: 1.0}]->(home), - (d)-[:LINKS {weight: 1.0}]->(home), - (links)-[:LINKS {weight: 0.8}]->(home), - (links)-[:LINKS {weight: 0.05}]->(a), - (links)-[:LINKS {weight: 0.05}]->(b), - (links)-[:LINKS {weight: 0.05}]->(c), - (links)-[:LINKS {weight: 0.05}]->(d) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -create_example_graph_on_disk_query = """ - CREATE - (home:Page {name:'Home'}), - (about:Page {name:'About'}), - (product:Page {name:'Product'}), - (links:Page {name:'Links'}), - (a:Page {name:'Site A'}), - (b:Page {name:'Site B'}), - (c:Page {name:'Site C'}), - (d:Page {name:'Site D'}), - - (home)-[:LINKS {weight: 0.2}]->(about), - (home)-[:LINKS {weight: 0.2}]->(links), - (home)-[:LINKS {weight: 0.6}]->(product), - (about)-[:LINKS {weight: 1.0}]->(home), - (product)-[:LINKS {weight: 1.0}]->(home), - (a)-[:LINKS {weight: 1.0}]->(home), - (b)-[:LINKS {weight: 1.0}]->(home), - (c)-[:LINKS {weight: 1.0}]->(home), - (d)-[:LINKS {weight: 1.0}]->(home), - (links)-[:LINKS {weight: 0.8}]->(home), - (links)-[:LINKS {weight: 0.05}]->(a), - (links)-[:LINKS {weight: 0.05}]->(b), - (links)-[:LINKS {weight: 0.05}]->(c), - (links)-[:LINKS {weight: 0.05}]->(d) -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(create_example_graph_on_disk_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -We then project an in-memory graph from the data just created. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -g, result = gds.graph.project( - "example-graph", - "Page", - "LINKS", - relationshipProperties="weight" -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.project( - 'example-graph', - 'Page', - 'LINKS', - { - relationshipProperties: 'weight' - } -) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -create_example_graph_in_memory_query = """ - CALL gds.graph.project( - 'example-graph', - 'Page', - 'LINKS', - { - relationshipProperties: 'weight' - } - ) -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(create_example_graph_in_memory_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -== Execution modes - -Every production-tier algorithm can be run in four different modes: - -* `stats` -* `stream` -* `mutate` -* `write` - -An additional `estimate` mode is explained in detail in the xref:aurads/tutorials/memory-estimation.adoc[] section. - -In the following we'll use the PageRank algorithm to show the usage of every execution mode. - -=== Stats - -The link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/running-algos/#running-algos-stats[`stats`^] mode can be useful for evaluating an algorithm performance without mutating the in-memory graph. When running an algorithm in this mode, a single row containing a summary of the algorithm statistics (for example, counts or percentile distributions) is returned. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.pageRank.stats( - g, - maxIterations=20, - dampingFactor=0.85 -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.pageRank.stats( - 'example-graph', - {maxIterations: 20, dampingFactor: 0.85} -) -YIELD ranIterations, - didConverge, - preProcessingMillis, - computeMillis, - postProcessingMillis, - centralityDistribution, - configuration -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -page_rank_stats_example_graph_query = """ - CALL gds.pageRank.stats( - 'example-graph', - {maxIterations: 20, dampingFactor: 0.85} - ) - YIELD ranIterations, - didConverge, - preProcessingMillis, - computeMillis, - postProcessingMillis, - centralityDistribution, - configuration - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(page_rank_stats_example_graph_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -The result contains the estimated time to run the algorithm (`computeMillis`) along with other details like the centrality distribution and the configuration parameters. - -=== Stream - -The link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/running-algos/#running-algos-stream[`stream`^] mode returns the results of an algorithm as Cypher result rows. This is similar to how standard Cypher reading queries operate. - -With the PageRank example, this mode returns a node ID and the computed PageRank score for each node. The link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/utility-functions/#utility-functions-node-path[`gds.util.asNode`^] procedure can then be used to find a node from its node ID. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -results = gds.pageRank.stream( - g, - maxIterations=20, - dampingFactor=0.85 -) - -print(results) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.pageRank.stream( - 'example-graph', - {maxIterations: 20, dampingFactor: 0.85} -) -YIELD nodeId, score -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query to just get internal node ID and score -page_rank_stream_example_graph_query = """ - CALL gds.pageRank.stream( - 'example-graph', - {maxIterations: 20, dampingFactor: 0.85} - ) - YIELD nodeId, score - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - results = session.run(page_rank_stream_example_graph_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True)) ----- -===== -==== - -Since an algorithm can run for a long time and the connection may suddenly drop, we suggest to use the `mutate` and `write` modes instead to make sure that the computation completes and the results are saved. - -=== Mutate - -The link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/running-algos/#running-algos-mutate[`mutate`^] mode operates on the in-memory graph and updates it with a new property specified with the `mutateProperty` configuration parameter. The new property must not already exist in the in-memory graph. - -This mode is useful when chaining the execution of several algorithms each of which relying on the results on the previous. - -In the case of PageRank, the result of this mode is a score for each node. In this example we add the calculated score to each node of the in-memory graph as the value of a new property called `pageRankScore`. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.pageRank.mutate( - g, - mutateProperty="pageRankScore", - maxIterations=20, - dampingFactor=0.85 -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.pageRank.mutate( - 'example-graph', - {mutateProperty: 'pageRankScore', maxIterations: 20, dampingFactor: 0.85} -) -YIELD nodePropertiesWritten, ranIterations -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query to just get mutate the graph -page_rank_mutate_example_graph_query = """ - CALL gds.pageRank.mutate( - 'example-graph', - {mutateProperty: 'pageRankScore', maxIterations: 20, dampingFactor: 0.85} - ) - YIELD nodePropertiesWritten, ranIterations - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(page_rank_mutate_example_graph_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -=== Write - -The link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/running-algos/#running-algos-write[`write`^] mode writes the results of the algorithm computation back to the Neo4j database. The written data can be node properties (such as PageRank scores), new relationships (such as Node Similarity similarities), or relationship properties (only for newly created relationships). - -Similarly to the previous example, here we add the calculated score of the PageRank algorithm to each node of the Neo4j database as the value of a new property called `pageRankScore`. - -TIP: To use the result of a `write` mode computation with another algorithm, a new in-memory graph must be created from the Neo4j database. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.pageRank.write( - g, - writeProperty="pageRankScore", - maxIterations=20, - dampingFactor=0.85 -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.pageRank.write( - 'example-graph', - {writeProperty: 'pageRankScore', maxIterations: 20, dampingFactor: 0.85} -) -YIELD nodePropertiesWritten, ranIterations -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query to write the graph -page_rank_write_example_graph_query = """ - CALL gds.pageRank.write( - 'example-graph', - {writeProperty: 'pageRankScore', maxIterations: 20, dampingFactor: 0.85} - ) - YIELD nodePropertiesWritten, ranIterations - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(page_rank_write_example_graph_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -== Cleanup - -After going through the example, both the in-memory graphs and the data in the Neo4j database can be deleted. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.graph.drop(g) -print(result) - -gds.run_cypher(""" - MATCH (n) - DETACH DELETE n -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.drop('example-graph'); - -MATCH (n) -DETACH DELETE n; ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_example_in_memory_graph_query = """ - CALL gds.graph.drop('example-graph') -""" - -delete_example_graph = """ - MATCH (n) - DETACH DELETE n -""" - -with driver.session() as session: - # Delete in-memory graph - result = session.run(delete_example_in_memory_graph_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True, default=default)) - - # Delete data from Neo4j - result = session.run(delete_example_graph).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/algorithm-progress.adoc b/modules/ROOT/pages/aurads/tutorials/algorithm-progress.adoc deleted file mode 100644 index 706c4195c..000000000 --- a/modules/ROOT/pages/aurads/tutorials/algorithm-progress.adoc +++ /dev/null @@ -1,231 +0,0 @@ -[[algorithm-progress]] -= Monitoring the progress of a running algorithm -:description: This page describes how to use monitor the algorithm progress. -:generated-graph-size: 1000000 -:notebook-name: Monitoring_the_progress_of_a_running_algorithm_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -Running algorithms on large graphs can be computationally expensive. This example shows how to use the link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/logging/#logging-progress-logging[`gds.beta.listProgress`^] procedure to monitor the progress of an algorithm, both to get an idea of the processing speed and to determine when the computation is completed. - -include::partial$aurads/setup.adoc[] - -include::partial$aurads/generated-graph.adoc[] - -== Run an algorithm and check the progress - -We need to run an algorithm that takes some time to converge. In this example we use the Label Propagation algorithm, which we start in a separate thread so that we can check its progress in the same Python process. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Import to run the long-running algorithm in a thread -import threading -# Import to use the sleep method -import time - - -# Method to call the label propagation algorithm from a thread -def run_label_prop(): - print("Running label propagation") - - result = gds.labelPropagation.mutate( - g, - mutateProperty="communityID" - ) - - print(result) - - -# Method to get and pretty-print the algorithm progress -def run_list_progress(): - result = gds.beta.listProgress() - - print(result) - - -# Create a thread for the label propagation algorithm and start it -label_prop_query_thread = threading.Thread(target=run_label_prop) -label_prop_query_thread.start() - -# Sleep for a few seconds so the label propagation query has time to get going -print('Sleeping for 5 seconds') -time.sleep(5) - -# Check the algorithm progress -run_list_progress() - -# Sleep for a few more seconds -print('Sleeping for 10 more seconds') -time.sleep(10) - -# Check the algorithm progress again -run_list_progress() - -# Block and wait for the algorithm thread to finish -label_prop_query_thread.join() ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.labelPropagation.mutate( - 'example-graph', - {mutateProperty: 'communityID'} -) -YIELD preProcessingMillis, - computeMillis, - mutateMillis, - postProcessingMillis, - nodePropertiesWritten, - communityCount, - ranIterations, - didConverge, - communityDistribution, - configuration -RETURN * - -// The following query has to be run in another Cypher shell, so run this command -// in a different terminal first: -// -// ./cypher-shell -a $AURA_CONNECTION_URI -u $AURA_USERNAME -p $AURA_PASSWORD - -CALL gds.beta.listProgress() -YIELD jobId, taskName, progress, progressBar -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Import to run the long-running algorithm in a thread -import threading -# Import to use the sleep method -import time - - -# Method to call the label propagation algorithm from a thread -def run_label_prop(): - label_prop_mutate_example_graph_query = """ - CALL gds.labelPropagation.mutate( - 'example-graph', - {mutateProperty: 'communityID'} - ) - YIELD preProcessingMillis, - computeMillis, - mutateMillis, - postProcessingMillis, - nodePropertiesWritten, - communityCount, - ranIterations, - didConverge, - communityDistribution, - configuration - RETURN * - """ - - # Create the driver session - with driver.session() as session: - # Run query - print("Running label propagation") - results = session.run(label_prop_mutate_example_graph_query).data() - # Prettify the first result - print(json.dumps(results[0], indent=2, sort_keys=True)) - - -# Method to get and pretty-print the algorithm progress -def run_list_progress(): - gds_list_progress_query = """ - CALL gds.beta.listProgress() - YIELD jobId, taskName, progress, progressBar - RETURN * - """ - - # Create the driver session - with driver.session() as session: - # Run query - print('running list progress') - results = session.run(gds_list_progress_query).data() - # Prettify the first result - print('list progress results: ') - print(json.dumps(results[0], indent=2, sort_keys=True)) - - -# Create a thread for the label propagation algorithm and start it -label_prop_query_thread = threading.Thread(target=run_label_prop) -label_prop_query_thread.start() - -# Sleep for a few seconds so the label propagation query has time to get going -print('Sleeping for 5 seconds') -time.sleep(5) - -# Check the algorithm progress -run_list_progress() - -# Sleep for a few more seconds -print('Sleeping for 10 more seconds') -time.sleep(10) - -# Check the algorithm progress again -run_list_progress() - -# Block and wait for the algorithm thread to finish -label_prop_query_thread.join() ----- -===== -==== - -== Cleanup - -The in-memory graph can now be deleted. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.graph.drop(g) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.drop('example-graph') ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_example_in_memory_graph_query = """ -CALL gds.graph.drop('example-graph') -""" - -with driver.session() as session: - # Run query - results = session.run(delete_example_in_memory_graph_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/arrow-examples.adoc b/modules/ROOT/pages/aurads/tutorials/arrow-examples.adoc deleted file mode 100644 index 99e751ea2..000000000 --- a/modules/ROOT/pages/aurads/tutorials/arrow-examples.adoc +++ /dev/null @@ -1,152 +0,0 @@ -[[connecting-arrow]] -= Loading and streaming back data with Apache Arrow -:description: This page describes how to use Apache Arrow on AuraDS. -:notebook-name: Arrow_examples.ipynb - -include::partial$aurads/colab.adoc[] - -The Enterprise Edition of GDS installed on AuraDS includes an link:https://neo4j.com/docs/graph-data-science/current/installation/configure-apache-arrow-server/[Arrow Flight server], configured and running by default. -The Arrow Flight server speeds up data-intensive processes such as: - -* Creating a graph directly from in-memory data. -* Streaming node and relationship properties. -* Streaming the relationship topology of a graph. - -There are two ways to use the Arrow Flight server with GDS: - -. By using the GDS Python client, which includes an Arrow Flight client. -. By implementing a custom Arrow Flight client as explained in the link:https://neo4j.com/docs/graph-data-science/current/management-ops/graph-creation/graph-project-apache-arrow/[GDS manual]. - -In the following examples we use the GDS client as it is the most convenient option. -All the loading and streaming methods can be used without Arrow, but are more efficient if Arrow is available. - -== Setup - -[source, python] ----- -%pip install 'graphdatascience>=1.7' - -from graphdatascience import GraphDataScience - -# Replace with the actual connection URI and credentials -AURA_CONNECTION_URI = "neo4j+s://xxxxxxxx.databases.neo4j.io" -AURA_USERNAME = "neo4j" -AURA_PASSWORD = "" - -# When initialized, the client tries to use Arrow if it is available on the server. -# This behaviour is controlled by the `arrow` parameter, which is set to `True` by default. -gds = GraphDataScience(AURA_CONNECTION_URI, auth=(AURA_USERNAME, AURA_PASSWORD), aura_ds=True) - -# Necessary if Arrow is enabled (as is by default on Aura) -gds.set_database("neo4j") ----- - -You can call the `gds.debug.arrow()` method to verify that Arrow is enabled and running: - -[source, python] ----- -gds.debug.arrow() ----- - -== Loading data - -You can load data directly into a graph using the link:https://neo4j.com/docs/graph-data-science-client/current/graph-object/#construct[`gds.graph.construct`] client method. - -The data must be a Pandas `DataFrame`, so we need to install and import the link:https://pandas.pydata.org/[`pandas`] library. - -[source, python] ----- -%pip install pandas - -import pandas as pd ----- - -We can then create a graph as in the following example. -The format of each `DataFrame` with the required columns is specified in the link:https://neo4j.com/docs/graph-data-science-client/current/graph-object/#construct[GDS manual]. - -[source, python, role=nocollapse] ----- -nodes = pd.DataFrame( - { - "nodeId": [0, 1, 2], - "labels": ["Article", "Article", "Article"], - "pages": [3, 7, 12], - } -) - -relationships = pd.DataFrame( - { - "sourceNodeId": [0, 1], - "targetNodeId": [1, 2], - "relationshipType": ["CITES", "CITES"], - "times": [2, 1] - } -) - -article_graph = gds.graph.construct( - "article-graph", - nodes, - relationships -) ----- - -Now we can check that the graph has been created: - -[source, python] ----- -gds.graph.list() ----- - -== Streaming node and relationship properties - -After creating the graph, you can read the node and relationship properties link:https://neo4j.com/docs/graph-data-science-client/current/graph-object/#graph-object-streaming-properties[as streams]. - -[source, python] ----- -# Read all the values for the node property `pages` -gds.graph.nodeProperties.stream(article_graph, "pages") ----- - -[source, python] ----- -# Read all the values for the relationship property `times` -gds.graph.relationshipProperties.stream(article_graph, "times") ----- - -== Performance - -To see the difference in performance when Arrow is available, we can measure the time needed to load a dataset into a graph. -In this example we use a built-in link:https://neo4j.com/docs/graph-data-science-client/current/common-datasets/#_ogbn_graphs[OGBN dataset], so we need to install the `ogb` extra. - -[source, python] ----- -%pip install 'graphdatascience[ogb]>=1.7' - -# Load and immediately drop the dataset to download and cache the data -ogbn_arxiv = gds.graph.ogbn.load("ogbn-arxiv") -ogbn_arxiv.drop() ----- - -We can then time the loading process. -On an 8 GB AuraDS instance, this should take less than 30 s. - -[source, python] ----- -%%timeit -n 1 -r 1 - -# This call uses the cached dataset, so only the actual loading is timed -ogbn_arxiv = gds.graph.ogbn.load("ogbn-arxiv") ----- - -With Arrow disabled by adding `arrow=False` to the `GraphDataScience` constructor, the same loading process would take more than 1 minute. -Therefore, with this dataset, Arrow provides at least a 2x speedup. - -== Cleanup - -[source, python] ----- -article_graph.drop() -ogbn_arxiv.drop() - -gds.close() ----- \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/graph-catalog.adoc b/modules/ROOT/pages/aurads/tutorials/graph-catalog.adoc deleted file mode 100644 index 30179d236..000000000 --- a/modules/ROOT/pages/aurads/tutorials/graph-catalog.adoc +++ /dev/null @@ -1,465 +0,0 @@ -[[graph-catalog]] -= Projecting graphs and using the Graph Catalog -:description: This page describes how to use project graphs and use the Graph Catalog. -:notebook-name: Projecting_graphs_and_using_the_Graph_Catalog_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -This example shows how to: - -* load Neo4j on-disk data into in-memory projected graphs; -* use the link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/[Graph Catalog^] to manage projected graphs. - -include::partial$aurads/setup.adoc[] - -== Load data from Neo4j with native projections - -Native projections are used to load into memory a graph stored on disk. The link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-creation/graph-project/[`gds.graph.project`^] procedure allows to project a graph by selecting the node labels, relationship types and properties to be projected. - -The `gds.graph.project` procedure can use a <<_project_using_the_shorthand_syntax,"shorthand syntax">>, where the nodes and relationships projections are simply passed as single values or arrays, or an <<_project_using_the_extended_syntax,"extended syntax">>, where each node or relationship projection has its own configuration. The extended syntax is especially useful if additional transformation of the data or the graph structure are needed. Both methods are shown in this section, using the following graph as an example. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Cypher query to create an example graph on disk -gds.run_cypher(""" - MERGE (a:EngineeringManagement {name: 'Alistair'}) - MERGE (j:EngineeringManagement {name: 'Jennifer'}) - MERGE (d:Developer {name: 'Leila'}) - MERGE (a)-[:MANAGES {start_date: 987654321}]->(d) - MERGE (j)-[:MANAGES {start_date: 123456789, end_date: 987654321}]->(d) -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -MERGE (a:EngineeringManagement {name: 'Alistair'}) -MERGE (j:EngineeringManagement {name: 'Jennifer'}) -MERGE (d:Developer {name: 'Leila'}) -MERGE (a)-[:MANAGES {start_date: 987654321}]->(d) -MERGE (j)-[:MANAGES {start_date: 123456789, end_date: 987654321}]->(d) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query to create an example graph on disk -write_example_graph_query = """ - MERGE (a:EngineeringManagement {name: 'Alistair'}) - MERGE (j:EngineeringManagement {name: 'Jennifer'}) - MERGE (d:Developer {name: 'Leila'}) - MERGE (a)-[:MANAGES {start_date: 987654321}]->(d) - MERGE (j)-[:MANAGES {start_date: 123456789, end_date: 987654321}]->(d) -""" - -# Create the driver session -with driver.session() as session: - session.run(write_example_graph_query) ----- -===== -==== - -=== Project using the shorthand syntax - -In this example we use the shorthand syntax to simply project all node labels and relationship types. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Project a graph using the shorthand syntax -shorthand_graph, result = gds.graph.project( - "shorthand-example-graph", - ["EngineeringManagement", "Developer"], - ["MANAGES"] -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.project( - 'shorthand-example-graph', - ['EngineeringManagement', 'Developer'], - ['MANAGES'] -) -YIELD graphName, nodeCount, relationshipCount -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -shorthand_graph_create_call = """ - CALL gds.graph.project( - 'shorthand-example-graph', - ['EngineeringManagement', 'Developer'], - ['MANAGES'] - ) - YIELD graphName, nodeCount, relationshipCount - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Call to project a graph using the shorthand syntax - result = session.run(shorthand_graph_create_call).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -=== Project using the extended syntax - -In this example we use the extended syntax for link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-creation/graph-project/#node-projection-syntax[node^] and link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-creation/graph-project/#relationship-projection-syntax[relationship^] projections to: - -* transform the `EngineeringManagement` and `Developer` labels to `PersonEM` and `PersonD` respectively; -* transform the _directed_ `MANAGES` relationship into the `KNOWS` _undirected_ relationship; -* keep the `start_date` and `end_date` relationship properties, adding a default value of `999999999` to `end_date`. - -The projected graph becomes the following: - -[source, cypher] ----- -(:PersonEM {first_name: 'Alistair'})- - [:KNOWS {start_date: 987654321, end_date: 999999999}]- - (:PersonD {first_name: 'Leila'})- - [:KNOWS {start_date: 123456789, end_date: 987654321}]- - (:PersonEM {first_name: 'Jennifer'}) ----- - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Project a graph using the extended syntax -extended_form_graph, result = gds.graph.project( - "extended-form-example-graph", - { - "PersonEM": { - "label": "EngineeringManagement" - }, - "PersonD": { - "label": "Developer" - } - }, - { - "KNOWS": { - "type": "MANAGES", - "orientation": "UNDIRECTED", - "properties": { - "start_date": { - "property": "start_date" - }, - "end_date": { - "property": "end_date", - "defaultValue": 999999999 - } - } - } - } -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.project( - 'extended-form-example-graph', - { - PersonEM: { - label: 'EngineeringManagement' - }, - PersonD: { - label: 'Developer' - } - }, - { - KNOWS: { - type: 'MANAGES', - orientation: 'UNDIRECTED', - properties: { - start_date: { - property: 'start_date' - }, - end_date: { - property: 'end_date', - defaultValue: 999999999 - } - } - } - } -) -YIELD graphName, nodeCount, relationshipCount -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -extended_form_graph_create_call = """ - CALL gds.graph.project( - 'extended-form-example-graph', - { - PersonEM: { - label: 'EngineeringManagement' - }, - PersonD: { - label: 'Developer' - } - }, - { - KNOWS: { - type: 'MANAGES', - orientation: 'UNDIRECTED', - properties: { - start_date: { - property: 'start_date' - }, - end_date: { - property: 'end_date', - defaultValue: 999999999 - } - } - } - } - ) - YIELD graphName, nodeCount, relationshipCount - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Call to project a graph using the extended syntax - result = session.run(extended_form_graph_create_call).data() - - # Prettify the results - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -== Use the Graph Catalog - -The Graph Catalog can be used to retrieve information on and manage the projected graphs. - -=== List all the graphs - -The link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-list/[`gds.graph.list`^] procedure can be used to list all the graphs currently stored in memory. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# List all in-memory graphs -all_graphs = gds.graph.list() - -print(all_graphs) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.list() ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -show_in_memory_graphs_call = """ - CALL gds.graph.list() -""" - -# Create the driver session -with driver.session() as session: - # Run the Cypher procedure - results = session.run(show_in_memory_graphs_call).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -=== Check that a graph exists - -The link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-exists/[`gds.graph.exists`^] procedure can be called to check for the existence of a graph by its name. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Check whether the "shorthand-example-graph" graph exists in memory -graph_exists = gds.graph.exists("shorthand-example-graph") - -print(graph_exists) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.exists('example-graph') ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -check_graph_exists_call = """ - CALL gds.graph.exists('example-graph') -""" - -# Create the driver session -with driver.session() as session: - # Run the Cypher procedure and print the result - print(session.run(check_graph_exists_call).data()) ----- -===== -==== - -=== Drop a graph - -When a graph is no longer needed, it can be dropped to free up memory using the link:{neo4j-docs-base-uri}/graph-data-science/current/management-ops/graph-drop/[`gds.graph.drop`^] procedure. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Drop a graph object and keep the result of the call -result = gds.graph.drop(shorthand_graph) - -# Print the result -print(result) - -# Drop a graph object and just print the result of the call -gds.graph.drop(extended_form_graph) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.drop('shorthand-example-graph'); - -CALL gds.graph.drop('extended-form-example-graph'); ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_shorthand_graph_call = """ - CALL gds.graph.drop('shorthand-example-graph') -""" - -delete_extended_form_graph_call = """ - CALL gds.graph.drop('extended-form-example-graph') -""" - -# Create the driver session -with driver.session() as session: - # Drop a graph and keep the result of the call - result = session.run(delete_shorthand_graph_call).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True, default=default)) - - # Drop a graph discarding the result of the call - session.run(delete_extended_form_graph_call).data() ----- -===== -==== - -== Cleanup - -When the projected graphs are dropped, the underlying data on the disk are not deleted. If such data are no longer needed, they need to be deleted manually via a Cypher query. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Delete on-disk data -gds.run_cypher(""" - MATCH (example) - WHERE example:EngineeringManagement OR example:Developer - DETACH DELETE example -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -MATCH (example) -WHERE example:EngineeringManagement OR example:Developer -DETACH DELETE example; ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_example_graph_query = """ - MATCH (example) - WHERE example:EngineeringManagement OR example:Developer - DETACH DELETE example -""" - -# Create the driver session -with driver.session() as session: - # Run Cypher call - print(session.run(delete_example_graph_query).data()) ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/memory-estimation.adoc b/modules/ROOT/pages/aurads/tutorials/memory-estimation.adoc deleted file mode 100644 index aea34605c..000000000 --- a/modules/ROOT/pages/aurads/tutorials/memory-estimation.adoc +++ /dev/null @@ -1,216 +0,0 @@ -[[memory-estimation]] -= Estimating memory usage and resizing an instance -:description: This page describes how to use estimate the needed memory. -:generated-graph-size: 50000000 -:notebook-name: Estimating_memory_usage_and_resizing_an_instance_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -This example shows how to: - -* use the link:{neo4j-docs-base-uri}/graph-data-science/current/common-usage/memory-estimation/[memory estimation^] mode to estimate the memory requirements for an algorithm before running it -* resize an AuraDS instance to accommodate the algorithm memory requirements - -include::partial$aurads/setup.adoc[] - -include::partial$aurads/generated-graph.adoc[] - -NOTE: The graph is fairly large, so the generation procedure will take a few minutes to complete. - -== Run the `estimate` mode - -The estimation of the memory requirements of an algorithm on an in-memory graph can be useful to determine whether the current AuraDS instance has enough resources to run the algorithm to completion. - -The Graph Data Science has guard rails built in: if an algorithm is estimated to use more RAM than is available, an exception is raised. In this case, the AuraDS instance can be resized before running the algorithm again. - -In the following example we get a memory estimation for the Label Propagation algorithm to run on the generated graph. The estimated memory is between 381 MiB and 4477 MiB, which is higher than an 8 GB instance has available (4004 MiB). - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.labelPropagation.mutate.estimate( - g, - mutateProperty="communityID" -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.labelPropagation.mutate.estimate( - 'example-graph', - {mutateProperty: 'communityID'} -) -YIELD nodeCount, - relationshipCount, - bytesMin, - bytesMax, - requiredMemory -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -page_rank_mutate_estimate_example_graph_query = """ - CALL gds.labelPropagation.mutate.estimate( - 'example-graph', - {mutateProperty: 'communityID'} - ) - YIELD nodeCount, - relationshipCount, - bytesMin, - bytesMax, - requiredMemory - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - results = session.run(page_rank_mutate_estimate_example_graph_query).data() - - # Prettify the result - print(json.dumps(results, indent=2, sort_keys=True)) ----- -===== -==== - -The `mutate` procedure hits the guard rails on an 8 GB instance, raising an exception that suggests to resize the AuraDS instance. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.labelPropagation.mutate( - g, - mutateProperty="communityID" -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.labelPropagation.mutate( - 'example-graph', - {mutateProperty: 'communityID'} -) -YIELD preProcessingMillis, - computeMillis, - mutateMillis, - postProcessingMillis, - nodePropertiesWritten, - communityCount, - ranIterations, - didConverge, - communityDistribution, - configuration -RETURN * ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -page_rank_mutate_example_graph_query = """ - CALL gds.labelPropagation.mutate( - 'example-graph', - {mutateProperty: 'communityID'} - ) - YIELD preProcessingMillis, - computeMillis, - mutateMillis, - postProcessingMillis, - nodePropertiesWritten, - communityCount, - ranIterations, - didConverge, - communityDistribution, - configuration - RETURN * -""" - -# Create the driver session -with driver.session() as session: - # Run query - results = session.run(page_rank_mutate_example_graph_query).data() - - # Prettify the result - print(json.dumps(results, indent=2, sort_keys=True)) ----- -===== -==== - -== Resize the AuraDS instance - -You will need to resize the instance to the next available size (16 GB) in order to continue. An AuraDS instance can be resized from the https://console.neo4j.io/?product=aura-ds[Neo4j Aura Console^] homepage. For more information, check the xref:aurads/managing-instances/instance-actions#_resizing_an_instance[Instance actions] section. - -NOTE: Resizing an AuraDS instance incurs a short amount of downtime. - -After resizing, wait a few seconds until the projected graph is reloaded, then run the `mutate` step again. This time no exception is thrown and the step completes successfully. - -== Cleanup - -The in-memory graph can now be deleted. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.graph.drop(g) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.drop('example-graph') ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -delete_example_in_memory_graph_query = """ - CALL gds.graph.drop('example-graph') -""" - -with driver.session() as session: - # Run query - results = session.run(delete_example_in_memory_graph_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/aurads/tutorials/model-catalog.adoc b/modules/ROOT/pages/aurads/tutorials/model-catalog.adoc deleted file mode 100644 index eef718244..000000000 --- a/modules/ROOT/pages/aurads/tutorials/model-catalog.adoc +++ /dev/null @@ -1,693 +0,0 @@ -[[model-catalog]] -= Persisting and sharing machine learning models -:description: This page describes how to use the model catalog. -:leading-underscore: _ -:notebook-name: Persisting_and_sharing_machine_learning_models_(GDS_client).ipynb - -include::partial$aurads/colab.adoc[] - -This example shows how to train, save, publish, and drop a machine learning model using the link:{neo4j-docs-base-uri}/graph-data-science/current/model-catalog/[Model Catalog]. - -include::partial$aurads/setup.adoc[] - -== Create an example graph - -We start by creating some basic graph data first. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -gds.run_cypher(""" - MERGE (dan:Person:ExampleData {name: 'Dan', age: 20, heightAndWeight: [185, 75]}) - MERGE (annie:Person:ExampleData {name: 'Annie', age: 12, heightAndWeight: [124, 42]}) - MERGE (matt:Person:ExampleData {name: 'Matt', age: 67, heightAndWeight: [170, 80]}) - MERGE (jeff:Person:ExampleData {name: 'Jeff', age: 45, heightAndWeight: [192, 85]}) - MERGE (brie:Person:ExampleData {name: 'Brie', age: 27, heightAndWeight: [176, 57]}) - MERGE (elsa:Person:ExampleData {name: 'Elsa', age: 32, heightAndWeight: [158, 55]}) - MERGE (john:Person:ExampleData {name: 'John', age: 35, heightAndWeight: [172, 76]}) - - MERGE (dan)-[:KNOWS {relWeight: 1.0}]->(annie) - MERGE (dan)-[:KNOWS {relWeight: 1.6}]->(matt) - MERGE (annie)-[:KNOWS {relWeight: 0.1}]->(matt) - MERGE (annie)-[:KNOWS {relWeight: 3.0}]->(jeff) - MERGE (annie)-[:KNOWS {relWeight: 1.2}]->(brie) - MERGE (matt)-[:KNOWS {relWeight: 10.0}]->(brie) - MERGE (brie)-[:KNOWS {relWeight: 1.0}]->(elsa) - MERGE (brie)-[:KNOWS {relWeight: 2.2}]->(jeff) - MERGE (john)-[:KNOWS {relWeight: 5.0}]->(jeff) - - RETURN True AS exampleDataCreated -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -MERGE (dan:Person:ExampleData {name: 'Dan', age: 20, heightAndWeight: [185, 75]}) -MERGE (annie:Person:ExampleData {name: 'Annie', age: 12, heightAndWeight: [124, 42]}) -MERGE (matt:Person:ExampleData {name: 'Matt', age: 67, heightAndWeight: [170, 80]}) -MERGE (jeff:Person:ExampleData {name: 'Jeff', age: 45, heightAndWeight: [192, 85]}) -MERGE (brie:Person:ExampleData {name: 'Brie', age: 27, heightAndWeight: [176, 57]}) -MERGE (elsa:Person:ExampleData {name: 'Elsa', age: 32, heightAndWeight: [158, 55]}) -MERGE (john:Person:ExampleData {name: 'John', age: 35, heightAndWeight: [172, 76]}) - -MERGE (dan)-[:KNOWS {relWeight: 1.0}]->(annie) -MERGE (dan)-[:KNOWS {relWeight: 1.6}]->(matt) -MERGE (annie)-[:KNOWS {relWeight: 0.1}]->(matt) -MERGE (annie)-[:KNOWS {relWeight: 3.0}]->(jeff) -MERGE (annie)-[:KNOWS {relWeight: 1.2}]->(brie) -MERGE (matt)-[:KNOWS {relWeight: 10.0}]->(brie) -MERGE (brie)-[:KNOWS {relWeight: 1.0}]->(elsa) -MERGE (brie)-[:KNOWS {relWeight: 2.2}]->(jeff) -MERGE (john)-[:KNOWS {relWeight: 5.0}]->(jeff) - -RETURN True AS exampleDataCreated ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -create_example_graph_on_disk_query = """ - MERGE (dan:Person:ExampleData {name: 'Dan', age: 20, heightAndWeight: [185, 75]}) - MERGE (annie:Person:ExampleData {name: 'Annie', age: 12, heightAndWeight: [124, 42]}) - MERGE (matt:Person:ExampleData {name: 'Matt', age: 67, heightAndWeight: [170, 80]}) - MERGE (jeff:Person:ExampleData {name: 'Jeff', age: 45, heightAndWeight: [192, 85]}) - MERGE (brie:Person:ExampleData {name: 'Brie', age: 27, heightAndWeight: [176, 57]}) - MERGE (elsa:Person:ExampleData {name: 'Elsa', age: 32, heightAndWeight: [158, 55]}) - MERGE (john:Person:ExampleData {name: 'John', age: 35, heightAndWeight: [172, 76]}) - - MERGE (dan)-[:KNOWS {relWeight: 1.0}]->(annie) - MERGE (dan)-[:KNOWS {relWeight: 1.6}]->(matt) - MERGE (annie)-[:KNOWS {relWeight: 0.1}]->(matt) - MERGE (annie)-[:KNOWS {relWeight: 3.0}]->(jeff) - MERGE (annie)-[:KNOWS {relWeight: 1.2}]->(brie) - MERGE (matt)-[:KNOWS {relWeight: 10.0}]->(brie) - MERGE (brie)-[:KNOWS {relWeight: 1.0}]->(elsa) - MERGE (brie)-[:KNOWS {relWeight: 2.2}]->(jeff) - MERGE (john)-[:KNOWS {relWeight: 5.0}]->(jeff) - - RETURN True AS exampleDataCreated -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(create_example_graph_on_disk_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -We then project an in-memory graph from the data just created. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -g, result = gds.graph.project( - "example_graph_for_graphsage", - { - "Person": { - "label": "ExampleData", - "properties": ["age", "heightAndWeight"] - } - }, - { - "KNOWS": { - "type": "KNOWS", - "orientation": "UNDIRECTED", - "properties": ["relWeight"] - } - } -) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.graph.project( - 'example_graph_for_graphsage', - { - Person: { - label: 'ExampleData', - properties: ['age', 'heightAndWeight'] - } - }, - { - KNOWS: { - type: 'KNOWS', - orientation: 'UNDIRECTED', - properties: ['relWeight'] - } - } -) ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -create_example_graph_in_memory_query = """ - CALL gds.graph.project( - 'example_graph_for_graphsage', - { - Person: { - label: 'ExampleData', - properties: ['age', 'heightAndWeight'] - } - }, - { - KNOWS: { - type: 'KNOWS', - orientation: 'UNDIRECTED', - properties: ['relWeight'] - } - } - ) -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(create_example_graph_in_memory_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -== Train a model - -Machine learning algorithms that support the `train` mode produce trained models which are stored in the Model Catalog. Similarly, `predict` procedures can use such trained models to produce predictions. In this example we train a model for the link:{neo4j-docs-base-uri}/graph-data-science/current/machine-learning/node-embeddings/graph-sage/[GraphSAGE algorithm^] using the `train` mode. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -model, result = gds.beta.graphSage.train( - g, - modelName="example_graph_model_for_graphsage", - featureProperties=["age", "heightAndWeight"], - aggregator="mean", - activationFunction="sigmoid", - sampleSizes=[25, 10] -) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- - CALL gds.beta.graphSage.train( - 'example_graph_for_graphsage', - { - modelName: 'example_graph_model_for_graphsage', - featureProperties: ['age', 'heightAndWeight'], - aggregator: 'mean', - activationFunction: 'sigmoid', - sampleSizes: [25, 10] - } - ) - YIELD modelInfo as info - RETURN - info.name as modelName, - info.metrics.didConverge as didConverge, - info.metrics.ranEpochs as ranEpochs, - info.metrics.epochLosses as epochLosses ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -train_graph_sage_on_in_memory_graph_query = """ - CALL gds.beta.graphSage.train( - 'example_graph_for_graphsage', - { - modelName: 'example_graph_model_for_graphsage', - featureProperties: ['age', 'heightAndWeight'], - aggregator: 'mean', - activationFunction: 'sigmoid', - sampleSizes: [25, 10] - } - ) - YIELD modelInfo as info - RETURN - info.name as modelName, - info.metrics.didConverge as didConverge, - info.metrics.ranEpochs as ranEpochs, - info.metrics.epochLosses as epochLosses -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(train_graph_sage_on_in_memory_graph_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -== View the model catalog - -We can use the link:{neo4j-docs-base-uri}/graph-data-science/current/model-catalog/list/[`gds.beta.model.list`^] procedure to get information on all the models currently available in the catalog. Along with information on the graph schema, the model name, and the training configuration, the result of the call contains the following fields: - -* `loaded`: flag denoting if the model is in memory (`true`) or available on disk (`false`) -* `stored`: flag denoting whether the model has been persisted to disk -* `shared`: flag denoting whether the model has been published, making it accessible to all users - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -results = gds.beta.model.list() - -print(results) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.beta.model.list() ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -list_model_catalog_query = """ - CALL gds.beta.model.list() -""" - -# Create the driver session -with driver.session() as session: - # Run query - results = session.run(list_model_catalog_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -== Save a model to disk - -The link:{neo4j-docs-base-uri}/graph-data-science/current/model-catalog/store/[`gds.alpha.model.store`^] procedure can be used to persist a model to disk. This is useful both to keep models for later reuse and to free up memory. - -[WARNING] -==== -Not all the models can be saved to disk. A list of the supported models can be found on the link:https://neo4j.com/docs/graph-data-science/current/model-catalog/store/#catalog-model-store[GDS manual]. - -*If a model cannot be saved to disk, it will be lost when the AuraDS instance is restarted.* -==== - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -result = gds.alpha.model.store(model) - -print(result) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.alpha.model.store("example_graph_model_for_graphsage") ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -save_graph_sage_model_to_disk_query = """ - CALL gds.alpha.model.store("example_graph_model_for_graphsage") -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(save_graph_sage_model_to_disk_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -If we list the model catalog again after persisting a model, we can see that the `stored` flag for that model has been set to `true`. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -results = gds.beta.model.list() - -print(results) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -CALL gds.beta.model.list() ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -list_model_catalog_query = """ - CALL gds.beta.model.list() -""" - -# Create the driver session -with driver.session() as session: - # Run query - results = session.run(list_model_catalog_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -== Share a model with other users - -After a model has been created, it can be useful to make it available to other users for different use cases. - -IMPORTANT: A model can only be shared with other users of the same AuraDS instance. - -=== Create a new user - -In order to see how this works in practice on AuraDS, we first of all need to link:{neo4j-docs-base-uri}/operations-manual/current/authentication-authorization/manage-users/[create another user^] to share the model with. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Switch to the "system" database to run the -# "CREATE USER" admin command -gds.set_database("system") - -gds.run_cypher(""" - CREATE USER testUser IF NOT EXISTS - SET PASSWORD 'password' - SET PASSWORD CHANGE NOT REQUIRED -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -:connect system - -CREATE USER testUser IF NOT EXISTS -SET PASSWORD 'password' -SET PASSWORD CHANGE NOT REQUIRED ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -create_a_new_user_query = """ - CREATE USER testUser IF NOT EXISTS - SET PASSWORD 'password' - SET PASSWORD CHANGE NOT REQUIRED -""" - -# Create the driver session using the "system" database -with driver.session(database="system") as session: - # Run query - result = session.run(create_a_new_user_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True)) ----- -===== -==== - -=== Publish the model - -A model can be _published_ (made accessible to other users) using the link:{neo4j-docs-base-uri}/graph-data-science/current/model-catalog/publish/[`gds.alpha.model.publish`] procedure. Upon publication, the model name is updated by appending `{leading-underscore}public` to its original name. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Switch back to the default "neo4j" database -# to publish the model -gds.set_database("neo4j") - -model_public = gds.alpha.model.publish(model) - -print(model_public) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -:connect neo4j - -CALL gds.alpha.model.publish('example_graph_model_for_graphsage') ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Cypher query -publish_graph_sage_model_to_disk_query = """ - CALL gds.alpha.model.publish('example_graph_model_for_graphsage') -""" - -# Create the driver session -with driver.session() as session: - # Run query - result = session.run(publish_graph_sage_model_to_disk_query).data() - - # Prettify the result - print(json.dumps(result, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -=== View the model as a different user - -In order to verify that the published model is visible to the user we have just created, we need to create a new client (or driver) session. We can then use it to run the `gds.beta.model.list` procedure again under the new user and verify that the model is included in the list. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -test_user_gds = GraphDataScience( - AURA_CONNECTION_URI, - auth=("testUser", "password"), - aura_ds=True -) - -results = test_user_gds.beta.model.list() - -print(results) ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -// First, open a new Cypher shell with the following command: -// -// ./cypher-shell -a $AURA_CONNECTION_URI -u testUser -p password - -CALL gds.beta.model.list() ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -test_user_driver = GraphDatabase.driver( - AURA_CONNECTION_URI, - auth=("testUser", "password") -) - -# Create the driver session -with test_user_driver.session() as session: - # Run query - results = session.run(list_model_catalog_query).data() - - # Prettify the results - print(json.dumps(results, indent=2, sort_keys=True, default=default)) ----- -===== -==== - -== Cleanup - -The in-memory graphs, the data in the Neo4j database, the models, and the test user can now all be deleted. - -[.tabbed-example] -==== -[.include-with-GDS-client] -===== -[source, python, subs=attributes+] ----- -# Delete the example dataset -gds.run_cypher(""" - MATCH (example:ExampleData) - DETACH DELETE example -""") - -# Delete the projected graph from memory -gds.graph.drop(g) - -# Drop the model from memory -gds.beta.model.drop(model_public) - -# Delete the model from disk -gds.alpha.model.delete(model_public) - -# Switch to the "system" database to delete the example user -gds.set_database("system") - -gds.run_cypher(""" - DROP USER testUser -""") ----- -===== - -[.include-with-Cypher] -===== -[source, cypher, subs=attributes+] ----- -// Delete the example dataset from the database -MATCH (example:ExampleData) -DETACH DELETE example; - -// Delete the projected graph from memory -CALL gds.graph.drop("example_graph_for_graphsage"); - -// Drop the model from memory -CALL gds.beta.model.drop("example_graph_model_for_graphsage_public"); - -// Delete the model from disk -CALL gds.alpha.model.delete("example_graph_model_for_graphsage_public"); - -// Delete the example user -DROP USER testUser; ----- -===== - -[.include-with-Python-driver] -===== -[source, python, subs=attributes+] ----- -# Delete the example dataset from the database -delete_example_graph_query = """ - MATCH (example:ExampleData) - DETACH DELETE example -""" - -# Delete the projected graph from memory -drop_in_memory_graph_query = """ - CALL gds.graph.drop("example_graph_for_graphsage") -""" - -# Drop the model from memory -drop_example_models_query = """ - CALL gds.beta.model.drop("example_graph_model_for_graphsage_public") -""" - -# Delete the model from disk -delete_example_models_query = """ - CALL gds.alpha.model.delete("example_graph_model_for_graphsage_public") -""" - -# Delete the example user -drop_example_user_query = """ - DROP USER testUser -""" - -# Create the driver session -with driver.session() as session: - # Run queries - print(session.run(delete_example_graph_query).data()) - print(session.run(drop_in_memory_graph_query).data()) - print(session.run(drop_example_models_query).data()) - print(session.run(delete_example_models_query).data()) - -# Create another driver session on the system database -# to drop the test user -with driver.session(database='system') as session: - print(session.run(drop_example_user_query).data()) - -driver.close() -test_user_driver.close() ----- -===== -==== - -=== Closing the connection - -include::partial$aurads/close-connection.adoc[] - -include::partial$aurads/references.adoc[] \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/connecting-applications/overview.adoc b/modules/ROOT/pages/connecting-applications/overview.adoc similarity index 100% rename from modules/ROOT/pages/auradb/connecting-applications/overview.adoc rename to modules/ROOT/pages/connecting-applications/overview.adoc diff --git a/modules/ROOT/pages/explore/explore-default-actions.adoc b/modules/ROOT/pages/explore/explore-default-actions.adoc new file mode 100644 index 000000000..d0a87cd39 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-default-actions.adoc @@ -0,0 +1,176 @@ +:description: This chapter contains default actions and keyboard shortcuts. + +[[default-actions]] += Default actions and shortcuts +A summary of the actions and associated keyboard shortcuts are below. + +//Check Mark +:check-mark: icon:check[] + +//Cross Mark +:cross-mark: icon:times[] + +.Explore Actions and their Keyboard Shortcuts +[cols=".^5a,.^20,.^50,.^25a,.^15a", options=header] +|=== +| +| Action +| Description +| Shortcut +| Typed in search bar + +| image:icon-magnifying-glass.png[width=25] +| Inspect +| Opens the detail view of a selected node, showing all its properties and labels +| _Mac_: kbd:[⌘+I] + +_Windows_: kbd:[Ctrl+I] +| {cross-mark} + +| image:select-related-nodes.png[width=25] +| Select related nodes +| Selects all nodes that can be connected to selected node +| _Mac_: kbd:kbd:[⌘+⇧+R] + +_Windows_: kbd:[Ctrl+⇧+R] +| {cross-mark} + +// | image:icon-pencil.png[width=25] | Edit node | Allows editing of all the properties of the selected node at once | _Mac_: kbd:[⌘+⌥+E] + +// _Windows_: kbd:[Ctrl+Alt+E] | {cross-mark} + +| image:icon-invert.png[width=25] +| Invert Selection +| Inverts the current selection +| _Mac_: kbd:[⌘+⌥+A] + +_Windows_: kbd:[Ctrl+Alt+A] +| {check-mark} + +| image:icon-fit-selection.png[width=25] +| Fit to selection +| Zooms in and centers the selection on the canvas +| _Mac_: kbd:[⌘+F] + +_Windows_: kbd:[Ctrl+F] +| {check-mark} + +| image:icon-expand-reveal.png[width=25] | Expand +| Expands all the neighbours of the selected nodes +| _Mac_: kbd:[⌘+E] + +_Windows_: kbd:[Ctrl+E] +| {check-mark} + +| image:icon-expand-reveal.png[width=25] +| Reveal +| List/Detail view specific action. +Reveals all the selected nodes or relationships on the canvas. +| +| {cross-mark} + +| image:icon-path.png[width=25] +| Path +| Shows the shortest path between two selected nodes +| +| {cross-mark} + +| image:icon-dismiss.png[width=25] +| Dismiss +| Hides all selected nodes and relationships +| _Mac_: kbd:[⌘+H] + +_Windows_: kbd:[Ctrl+H] +| {check-mark} + +| image:icon-dismiss.png[width=25] +| Dismiss other nodes +| Hides everything that is not selected +| _Mac_: kbd:[⌘+⇧+H] + +_Windows_: kbd:[Ctrl+⇧+H] +| {check-mark} + +| image:icon-add.png[width=25] +| Create relationship +| Allows the creation of relationship between two selected nodes. +The direction is set in the sequence in which the two nodes are clicked. +| +| {cross-mark} + +| image:icon-add.png[width=25] +| Create node +| Allows the creation of a node in a specified category. +The newly created node will inherit all the labels that category has. +| +| {cross-mark} + +| image:icon-duplicate.png[width=25] +| Duplicate +| Duplicates a selected node with all the properties it has. +The newly duplicated node is always selected and has no relationships to other nodes. +| _Mac_: kbd:[⌘+D] + +_Windows_: kbd:[Ctrl+D] +| {cross-mark} + +| image:icon-clear.png[width=25] +| Clear Scene +| Clears the whole scene and collapses the list view +| _Mac_: kbd:[⌘+⌫] + +_Windows_: kbd:[Ctrl+⌫] +| {cross-mark} + +| image:refresh-data.png[width=25] +| Refresh Data +| Refreshes the data in the Scene +| +| {cross-mark} + +| image:dismiss-single-nodes.png[width=25] +| Dismiss single nodes +| Hides all nodes that have no relationships to other nodes in the Scene +| _Mac_: kbd:[⌘+⇧+S] + +_Windows_: kbd:[Ctrl+⇧+S] +| {cross-mark} + +| image:icon-undo.png[width=25] +| Undo +| +| +| {check-mark} + +| image:icon-redo.png[width=25] +| Redo +| +| +| {check-mark} + +| image:icon-jumpto.png[width=25] +| Jump to node/relationship +| Zooms in and centers the desired node or relationship on the canvas +| +| {cross-mark} + +| +| Select All +| Selects all properties and relationships on the canvas +| _Mac_: kbd:[⌘+A] + +_Windows_: kbd:[Ctrl+A] +| {cross-mark} + +| +| Zoom In +| +| _Mac_: kbd:[⌘ + +] +| {cross-mark} + +| +| Zoom Out +| +| _Mac_: kbd:[⌘ + -] +| {cross-mark} +|=== diff --git a/modules/ROOT/pages/explore/explore-features/edit-graph-data.adoc b/modules/ROOT/pages/explore/explore-features/edit-graph-data.adoc new file mode 100644 index 000000000..b5e920cd1 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/edit-graph-data.adoc @@ -0,0 +1,69 @@ +:description: This section describes how to edit graph data in Explore. + += Edit graph data + +Explore allows you to edit your graph data directly from the scene. +Consequently, the only data you can modify is what is visible in the current scene. +You can also create new nodes and relationships in your scene, which are added to your database. + +[NOTE] +==== +Editing data in Explore requires write permission to the database. +==== + +* *Edit labels* - You can add or remove labels from a node when you inspect its properties in the Inspector. +Only labels available in the database can be added. + +[.shadow] +image::edit-label.png[width=300] + +* *Edit or add properties* - You can add, edit or delete properties on a node when you inspect its properties in the Inspector. +Only property keys enabled for viewing in Explore (as defined in the Perspective) will be visible and editable. +Relationship properties can also be edited in its respective Inspector. + +[.shadow] +image::edit-properties.png[width=300] + +* *Create new relationships* - New relationships can be created from the canvas directly. +To create a new relationship, select the source and destination nodes taking care to select the source node first. +The right-click context menu will show the `Create relationship` enabled with a sub-menu showing the available relationship types. +Only relationship types available in the database can be added. +Note that database constraints, if they exist, affect the ability to create relationships. +See the link:https://neo4j.com/docs/cypher-manual/current/constraints/[Cypher Manual -> Constraints] for more information on constraints. + +[.shadow] +image::create-relationship.png[width=300] + +* *Create new nodes* - New nodes can also be created from the canvas. +To create an empty new node, use the canvas context menu and select an existing category to which the node should be assigned. +Another option is to duplicate an existing node from its context menu. +If you attempt to create a node of a particular label that has existence or uniqueness constraints for one or more properties, the Inspector shows which properties that require (unique) values before you can create the node. +See the link:https://neo4j.com/docs/cypher-manual/current/constraints/[Cypher Manual -> Constraints] for more information on constraints. + +[.shadow] +image::create-node.png[width=300] + +* *Delete a relationship* - A relationship can be deleted from the canvas as well. +With the desired relationship selected, the context menu includes an option to delete the relationship. +If more than one relationship is selected, you can delete the selection. + +[.shadow] +image::delete-relationship.png[width=300] + +* *Delete nodes* - Similarly, nodes can also be deleted directly from the canvas. +The context menu for nodes allows you to delete selected node(s) in the same way as for relationships. + +[.shadow] +image::delete-node.png[width=300] + +[NOTE] +==== +You can only delete elements from the database if your role has required permissions. +See link:https://neo4j.com/docs/operations-manual/current/authentication-authorization/[Operations Manual -> Authentication and authorization] for more information on role-based access control. +==== + +[WARNING] +==== +Deleting nodes and relationships from the canvas permanently deletes them from the database. +Be careful with this option as it cannot be undone. +==== diff --git a/modules/ROOT/pages/explore/explore-features/full-text-search.adoc b/modules/ROOT/pages/explore/explore-features/full-text-search.adoc new file mode 100644 index 000000000..e39266699 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/full-text-search.adoc @@ -0,0 +1,29 @@ +:description: This section describes full-text search in Explore. + +[[bloom-fulltext-search]] += Full-text search + +Explore allows users to always run a full-text search query against the database for their search input. +This is useful when suggestions provided by Explore do not satisfy the user’s need. +Full-text search using the input is the last suggestion provided to the user in the suggestions list. + +[.shadow] +image::full-text-search.jpg[width=400] + +Explore can take advantage of native full text indexes in the database. +Additionally, for small graphs with low cardinality in data values (e.g. the Movies graph), Explore is able to search in property values without requiring an explicit index. +The full text string entered by the user is searched as one unit for these cases. + +[NOTE] +==== +Full-text searching can be a time-consuming operation. +Depending on the database, the state of indexes, and the search input requested, you may have a noticeable lag in response time because the queries may take a long time to return. +That's why full-text search is kept as the last option in the suggestions list, to avoid unintentional use. +==== + +[WARNING] +==== +When there is a delay in getting the search suggestions to return, the full-text search is the only option available to the user in the suggestions list. +It is recommended not to use the full-text search suggestion inadvertently. +The user may have to wait for a long time before results are returned and the full-text search can put a slightly larger workload on the database server. +==== diff --git a/modules/ROOT/pages/explore/explore-features/graph-pattern-search.adoc b/modules/ROOT/pages/explore/explore-features/graph-pattern-search.adoc new file mode 100644 index 000000000..59772714b --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/graph-pattern-search.adoc @@ -0,0 +1,115 @@ +:description: This section describes how do a graph pattern search in Neo4j Explore. + +[[graph-pattern-search]] += Graph pattern search + +Explore provides an easy and flexible way to explore your graph through graph patterns. +It uses a vocabulary built from your graph and Perspective elements (categories, labels, relationship types, property keys and property values). +Uncategorized labels and relationships or properties hidden in the Perspective are not considered in the vocabulary. +To build a graph pattern search in Explore, you use this vocabulary and either build the pattern step by step or type in a near-natural language phrase. + +// There are two different search experiences in Explore, the default search and the classic search. +// To switch between the two, use the toggle in the xref::/Explore-visual-tour/settings-drawer.adoc[Settings] drawer. + +== Step-by-step pattern building with proactive suggestions + +One approach to building graph patterns is to use the proactive suggestions feature of Explore. +This is useful when you need assistance with picking elements of your graph schema (e.g. relationship types from a label or categories that connect together). + +When you go to the search bar, Explore presents proactive options to begin your search. +You can select from any node labels available in the Perspective or use a blank `(any)` node. +Further, if you know which relationship you are interested in, but not which node labels it connects, you can select based on the relationship type and use the wildcard option for the node label (the `(any)` node). +Additionally, you can filter the suggestions by Search phrases, nodes, or relationships. + +// But, as explained in the following section on xref::/explore-features/graph-pattern-search.adoc#language-graph-patterns[Near-natural language and graph patterns], you can always type your own query as well. + +[.shadow] +image::proactive-blank-input.png[width=400] + +If you select a node label, `Product` for example, Explore lets you choose if you want to further filter on the start node by its relationships or if you want to refine by properties and/or property values. +Explore gives you a hint about the datatype of the property value directly in the search bar. + +[.shadow] +image::proactive-product-selected.png[width=400] + +If you select `Properties`, you can see all properties for the `Product` label and if you pick `discontinued` for example, you can then specify the condition, for example `true`. +This results in a pattern that starts with a discontinued product and filters all other nodes, both the ones with other labels as well as the `Product` nodes where the `discontinued` property does not equal `true`. + +From here, you can either press the play icon to display all discontinued products, or you can continue defining your graph pattern. + +When you are happy with the start node, select `Relationship` to see a list of available relationship types for your specified start node, both incoming and outgoing. +Similarly, you can further filter on properties for the relationship, if available. +If you are not interested in the type of relationship, you can use the wildcard `(any)` relationship. + +The last step is to specify the end node, which naturally follows the same steps as the start node. +The wildcard option, `(any)`, is available here as well. + +Press the play icon when you are ready to execute the search. + +=== A note on property-value suggestions + +`Category`, `label` and `relationship type` matches are searched in Explore's in-memory metadata of available graph and Perspective elements. +For property matches, Explore queries the database instead to find suggestions. +To do so, Explore relies on property indexes to be set up in the database for any properties that should be searchable in Explore. + +For bigger graphs, all properties of a node with a certain label are considered as indexed if there are less than 1000 nodes with the specific label. +However, if a property has the same value on more than 10% of the nodes, it is not searchable, whether indexed or not, for performance reasons. +For small graphs with low cardinality in data values (e.g. the Movies graph, found in the https://neo4j.com/developer/example-data[example data sets]), Explore is able to search for property values without requiring an index. + +Depending on the search input, the number of indexes, and the speed of typing in the search box, it is possible that Explore runs a large number of index lookup queries to find relevant matches. +Optimizations are built-in to delay firing queries while waiting for user to complete the input and to cancel un-needed queries if the input is changed. + +Explore also attempts to hide pattern permutations from the suggestions list, if they are not found in the database. +This may not be applicable in all situations. +It is possible for database performance issues or network latency between the user’s machine and the Neo4j server to cause delays in showing search suggestions. + +//As of 2.12, this doesn't work +// [[language-graph-patterns]] +// == Near-natural language and graph patterns + +// Assume that you want to find `Products` that are connected to `Orders` by any relationship. +// Using a near-natural language search expression, you can type in the search in several different ways. + +// [NOTE] +// ==== +// To use the full-text search, a full-text index needs to be present in the database. +// ==== + +// For example, if you type `Product Order` in the search bar, you get the following suggestion: + +// [.shadow] +// image::product-order.png[width=400] + +// This is straightforward, a `Product` node connected via the wildcard `(any)` relationship to an `Order` node. +// You can execute or further refine by adding more relationships to the pattern, or by defining conditions based on the properties of the `Order` nodes. + +// But if you instead type `order with product` in the search bar and run it as a full-text search, Explore returns seven nodes: + +// [.shadow] +// image::full-text-search.png[width=800] + +// If you inspect these nodes individually, you can see that all of them has either `order` and/or `product` among their property values. +// A full-text search requires at least three characters in the search bar. +// Explore matches them exactly and if you enter multiple words, the returned elements contain at least one of them. + +// If the results of a full-text search exceeds the node query limit, Explore presents you with a pop-up which lets you select which elements to add to the Scene instead of blocking all results. +// Typing `order of a product` in the search bar yields many matches and if your limit is set below 1000, it results in the following: + +// [.shadow] +// image::search-pop-up.png[width=600] + + +== Case sensitivity of input + +Neo4j database is *case sensitive*. +By default, property values are matched by Explore in a *case sensitive* fashion, if they *begin with* any of the matching tokens input by the user. + +By contrast, metadata elements like labels, categories, relationship types or property keys, are matched in a *case insensitive* fashion. +Also, metadata elements are matched if they simply contain one of the search tokens. + +[NOTE] +==== +Case insensitive matching of property values requires full-text indexes on all properties that will be searched. +Without full-text indexes, Explore will use case sensitive searching. +==== + diff --git a/modules/ROOT/pages/explore/explore-features/scene-actions.adoc b/modules/ROOT/pages/explore/explore-features/scene-actions.adoc new file mode 100644 index 000000000..596896cf6 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/scene-actions.adoc @@ -0,0 +1,41 @@ +:description: This section describes Scene actions in Explore. + +[[scene-actions]] += Scene actions + +_Scene actions_ are parameterized Cypher queries, much like xref:explore/explore-visual-tour/search-bar.adoc#search-phrase[Search phrase]s. +The difference is that in a Scene action, the parameters can be the selected elements in your current selection instead of all available and matching elements in your graph. +Also, whereas Scene actions are defined in the Perspective drawer under _Saved Cypher_, they are invoked from the context menu. + +The Scene actions are listed in the order they were created. +Explore lets you reorder them any way you like by dragging and dropping them as you please in the Perspective drawer. +The order of Scene actions in the Perspective drawer is also reflected from the context menu. + +[.shadow] +image::scene-action-context.png[width=500] + +In the following example, using the Northwind graph, a Scene action, _Discontinued products_, is created (and saved) based on the selected nodes in the scene. +This Scene action is available from the context menu when node(s) are selected and displays products that have been discontinued from the selected suppliers. + +[.shadow] +image::scene-action.png[width=400] + +It is possible to make the Scene action available for only some categories, you control this in the _Action Availability_ dropdown menu. + +[.shadow] +image::action-availability.png[width=300] + +If a relationship is selected instead of nodes, the _Discontinued products_ Scene action is not available, which is a result of the `WHERE id(n) in $nodes` on the second line of the Cypher query. + +[.shadow] +image::scene-action-relationship.png[width=400] + +If you write a Scene action where your query targets relationships rather than nodes, they are defined in a similar fashion, `WHERE id(r) in $relationships`. +However, Explore reminds you if you forget. + +[NOTE] +==== +Only the distinction between `$nodes` and `$relationships` matters to a Scene action's availability for a selected element. +Any further refinement, such as the `p.discontinued=true` in the example, is ignored in from this point of view. +For example, if you select a `Supplier` node that is not connected to any discontinued products, the Scene action _Discontinued products_ is still available, but running it does not yield any results. +==== diff --git a/modules/ROOT/pages/explore/explore-features/search-phrases-advanced.adoc b/modules/ROOT/pages/explore/explore-features/search-phrases-advanced.adoc new file mode 100644 index 000000000..cfdbfcda9 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/search-phrases-advanced.adoc @@ -0,0 +1,116 @@ +:description: This section describes more advanced Search phrases in Explore. + +[[search-phrases-advanced]] += Search phrases for advanced queries + +As mentioned in xref:explore/explore-visual-tour/search-bar.adoc#search-phrase[Search phrase], a Search phrase allows you to save a pre-defined graph query. +Search phrases are defined in the Perspective drawer and automatically saved when created. +Your saved Search phrases can be accessed from the Perspective drawer as well. + +== Static Search phrase + +[.shadow] +image::static-search-phrase.png[width=400] + +In this example using the Northwind graph, a static Search phrase has been saved with a Cypher query that spans multiple nodes and relationships. +The first box titled `Search phrase` specifies the phrase that the user will type in partially or fully. +The description appears underneath all the Search phrase matches displayed to the user. + +Explore will match any part of the Search phrase field in a case-insensitive fashion. +For example, typing in `germ` or `ORDER` or `SeaFoo` will all show a match for `Germans ordering Seafood`. + +== Dynamic Search phrases + +[.shadow] +image::parameterized-search-phrase.png[width=400] + +Parameters can be used in Search phrases to make them dynamic. +In this example using the Northwind graph, there are 2 parameters (indicated with `$` sign in front) added to the Search phrase. +These allow for further user input to determine which query should be run. +There are three options available for suggestions to these parameters: + +* *No suggestions* - If selected, the suggestions list will not show when using the Search phrase. +* *Label-key* - Allows picking label:key pair for the suggestions list. +* *Cypher query* - Custom written Cypher query for the suggestions list. + +[[parameter-data-types]] +=== Parameter data types + +The data type for every parameter must be specified. +Explore supports `string`, `integer`, `float` and `boolean` data types. +Additionally, Explore also supports the temporal types `Date`, `Time`, `DateTime`, `LocalDate`, and `LocalDateTime`. +Temporal types with time zones, i.e. `Time` and `DateTime`, can also be used for rule-based styling or filters. +You can search for them and get search suggestions and also edit them in the Inspector (provided that you have write access to the graph). + +User input for a parameter gets converted to the data type specified for it. + +If you want to setup parameters for other data types supported in Cypher, you can use a combination of `string`, `integer`, `float` and `boolean` inputs to build other data types for Cypher. +Please see link:https://neo4j.com/docs/cypher-manual/current/values-and-types/[Cypher manual -> Values and types] for more information on data types. + +A couple of scenarios are described below, but there are a number of others that you may come across. + +* *Temporal (date or time) type*: When you have temporal properties, you can use `Date`, `Time`, `DateTime`, `LocalDate`, or `LocalDateTime` Cypher functions along with a string parameter. +For example: ++ +[source, cypher, indent=0] +---- +MATCH (n:Employee) where n.startDate = date($inDate) +return n +---- ++ +where `$inDate` would be a `string` input like `2019-05-23`. + +* *Spatial type*: For spatial properties, you can use point or distance Cypher functions along with float parameters in a Search phrase. For example: ++ +[source, cypher, indent=0] +---- +MATCH (n:Store) where n.location = point({latitude:$lat, longitude:$long}) +return n +---- ++ +where `$lat` and `$long` would have `float` inputs like `37.55` and `-122.31`. + + +=== Chaining of parameters + +The user-input for one parameter can be used to filter the list of suggestions provided for a subsequent parameter. +This is referred to as _parameter chaining_. +For example, consider the Search phrase used above with multiple parameters, `Customers from $country ordering $category`. +In this case, perhaps you want to restrict the list of category suggestions based on the country the user picked, parameter chaining will help you achieve this. +To use it, the list of category suggestions will need to be constructed using a Cypher query that uses the `$country` parameter to filter categories. +See image below for an example of what this could look like. + +[.shadow] +image::parameter-chaining.png[width=400] + +== Search phrases caveats + +* Explore will limit the number of records processed for the visualization to 10000 unless a smaller limit has been set in the query. +This is to prevent the app from hanging or crashing for queries that return too many records. ++ +[.shadow] +image::query-limit.png[width=400] ++ +* It is recommended that Search phrases either return a path or a set of nodes. ++ +[WARNING] +==== +Returning only relationships may cause unexpected behavior in addition to no graph visualization changes. +==== ++ +For example, the following query: ++ +[source, cypher, indent=0] +---- +MATCH ()-[r:CONNECTED_TO]->() RETURN r +---- ++ +Should be refactored to: ++ +[source, cypher, indent=0] +---- +MATCH p = ()-[r:CONNECTED_TO]->() RETURN p +---- + +* Furthermore, be aware that it is possible to modify data with a Search phrase as any valid Cypher query can be used. + It is not recommended to use Search phrase for this goal as an end-user might not be aware of the consequences of running a Search phrase that includes WRITE transactions. diff --git a/modules/ROOT/pages/explore/explore-features/slicer.adoc b/modules/ROOT/pages/explore/explore-features/slicer.adoc new file mode 100644 index 000000000..4a0f31eef --- /dev/null +++ b/modules/ROOT/pages/explore/explore-features/slicer.adoc @@ -0,0 +1,59 @@ +[[slicer]] += Slicer +:description: This section introduces the Slicer functionality in Explore. + +The Slicer is a feature that lets you quickly and interactively change what is visible in your scene. +It allows you to demonstrate difference in numerical values of properties via a timeline. +You can do it by manually scrubbing or use the playback function. + +//replace image when get hands on plugin +[.shadow] +image::slicer.png[width=800] + +To use an example from the Northwind dataset, let's say you want to place a large order of any kind of beer but want to make sure that there are enough units in stock before you place your order. +Once you have the products of choice in your scene, access the Slicer via the Slicer button, which will open a panel on the bottom. +Click _Add Range_ and select which property you want to use. + +[.shadow] +image::add_range.png[width=400] + +Note that only properties with _numerical_ values are available: + +* `dateTime` +* `date` +* `time` +* `localTime` +* `localDateTime` +* `duration` +* `integer` +* `float` + +In case your property is temporal and includes multiple timezones, it is possible to translate them into the same timezone. + +The property values of `unitsInStock` are integers and once selected, all available values for this property are displayed on a timeline. +If you hover over a bar on the timeline, you can see information on how many visible nodes that have each value. + +You can manually scrub along the timeline or use the playback function to visualize the changes in property values. +Let's say you need at least 100 units of beer, you select values >100 on the timeline to see which kinds of beer are available. + +[.shadow] +image::selected-values.png[width=800] + +The playback function lets you visualize your selected ranges in real time. +Start by selecting one or more values by manually expanding or narrowing your selection, then press the play button and watch nodes appear/disappear in the scene based on the value of their `unitsInStock` property. + +[.shadow] +image::playback.png[width=400] + +You can select between three different modes for playback: + +* Slide range to end - This option plays in increments of the size of the range you have selected on the timeline. +* Start of range to end - This option starts with displaying your selected range and successively expands until all values are displayed. +* Within range - This option starts in the beginning of your selection and successively decreases until it reaches the end of your selction. + +Sometimes it may desirable to filter out data by one property first and then further refine by another property. +The Slicer lets you add up to five different ranges. + +While you are using the Slicer, you can't interact with the scene in any other way than selecting/deselecting nodes or relationsips. +To be able to interact again, you need to close the Slicer and this can be done in two ways, by the _Keep Scene and Close_ button or the *X* next to the button. +The difference between the two is that the button keeps the scene as-is while the *X* restores the scene to what it was before you opened the Slicer. diff --git a/modules/ROOT/pages/explore/explore-perspectives/database-scans.adoc b/modules/ROOT/pages/explore/explore-perspectives/database-scans.adoc new file mode 100644 index 000000000..64a950713 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-perspectives/database-scans.adoc @@ -0,0 +1,27 @@ +:description: This section describes database scans in Explore. + +[[database-scans]] += Database scans + +A database scan is performed each time a perspective is created or refreshed, in order to determine what property keys are present for each label and relationship type. +This information is used in various places in Explore, such as the categories, Search phrase editor and styling rules. + +When the database contains > 10,000,000 nodes and relationships combined, Explore provides two scan options, _complete_ scan or _quick_ scan. +The complete scan will scan all the nodes and relationships in the database, whereas the quick one only scans a random sample. +The quick scan is faster than the complete, but it may not find all property keys if they are only present on a few nodes or relationships. +A complete scan can take a long time if the database is large and may result in a Explore timeout. +If you opt for a complete scan of a large database and you experience a Explore timeout, select the quick scan and try again. +For smaller graphs, Explore always performs a complete scan of the database without giving these options. + +[.shadow] +image::datascan-generate.png[width=400] +[.shadow] +image::datascan-refresh.png[width=400] + +If you know that you have a consistent schema for your database and/or if your database is large, a quick scan is recommended. +On the other hand, if you have an inconsistent schema and/or if you can't find some of your properties after a quick scan, a full scan is advisable. + +[NOTE] +==== +The database scan/refresh is triggered by the creation of a new Perspective or by the refresh of an existing Perspective and cannot be done manually. +==== diff --git a/modules/ROOT/pages/explore/explore-perspectives/perspective-creation.adoc b/modules/ROOT/pages/explore/explore-perspectives/perspective-creation.adoc new file mode 100644 index 000000000..43478bdc1 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-perspectives/perspective-creation.adoc @@ -0,0 +1,104 @@ +:description: This section describes how to create and use Perspectives in Explore. + +[[perspective-creation]] += Creation and use + +== Creating a Perspective + +[.shadow] +image::perspective-creation.png[width=800,align="center"] + +Perspectives can be selected or created from the Perspective gallery, found in the Perspective drawer. +There are two options when you opt to create a new Perspective: + +. *Generate Perspective* - With this option, Explore performs a scan of the database and analyze the labels within the graph, identifying the smallest number of labels that uniquely categorize all nodes. +Explore then creates the perspective and auto-fill in the requisite category definitions, select properties for captioning categories, populate list of available relationship types, and set default styles. +Once created, the Perspective definition can be edited and reconfigured differently at any time. ++ +When Explore connects to a database for the first time, auto generating the Perspective might be the best option in most cases. ++ +As mentioned above, if the database contains more than 10,000,000 nodes and relationships combined, a complete scan takes a long time and you can elect to run a quick scan instead. +See xref:explore/explore-perspectives/database-scans.adoc[Database scans] for more details. + + +. *Blank Perspective* - With this option, you can build a Perspective from scratch by defining each category and configuring properties and styling for it. +Explore still adds the list of available relationship types. ++ +Choose this option when you have a large number of labels in the data, but your Perspective only needs to contain a small subset of them. +It is more efficient to create the Perspective manually rather than auto-generating it and reconfiguring to remove many categories. + +[NOTE] +==== +The first time you open Explore with a new database, Explore automatically generates a perspective (Auto-perspective). +As described above, Explore samples a node from each category it finds and use the properties of the sampled node. +As you query more data, Explore adds any new properties as they are found. +==== + + +*Perspective Export and Import* + +You can also export the Perspective definition in a serialized json file format. +This is useful to either save the definition as of a certain time, or to migrate Perspectives between different environments. +The json file can then be imported using Explore connected to the same or a different database. + + +Both exporting and importing a Perspective can be done from the Perspective gallery. +If you have multiple Perspectives, you can filter them by typing in the search box located on the top of the Perspective gallery. + +[.shadow] +image::perspective-export-import.png[width=800] + +== Components of a Perspective + +[.shadow] +image::perspective-components.png[width="800"] + +In the Perspective designer, you can specify *Categories*, *Relationships* and tailored *Cypher queries* for a Perspective. + +[discrete] +[[perspective-categories]] +=== Categories + +Within a Perspective, a category defines each business entity – Person, Place or Thing – which is visible through the Perspective. +Typically, a single graph label maps to a particular category, but multiple labels may also be mapped to a single category. + +When you create a category, Explore analyzes the graph to find the related properties and other labels that occur on nodes that have the category-defining label. +If desired, you can select which properties to exclude from the visualization. +Explore assigns a default color for the category, but you can change the default color and node sizes from the xref:explore/explore-visual-tour/legend-panel.adoc[Legend panel]. +You can also give the category an icon from an extensive library of searchable icons. +Rule-based styling can also be applied at any stage. + +[TIP] +==== +Keep in mind when you manually create a Perspective, that Explore assigns nodes to categories in the order the categories appear in the list. +The category labels above take precedence over the ones below. +A new category is by default added to the top of the list, but the list can be rearranged by dragging the categories up or down, allowing you to control the order of importance. +==== + +[NOTE] +==== +If a node has multiple labels, and the labels are mapped to different categories, the category which is defined first in the Perspective definition is used by Explore for that node. +Hence the styling of the node is driven by the first category to which any of its labels are mapped. +For example, if _Tom Hanks_ has the `Person` and `Actor` labels, and there are two respective categories defined for `Actor` and `Person` in that order, the styling for the _Tom Hanks_ node will be derived from the `Actor` category. +However, when searching for all `Person` nodes, _Tom Hanks_ will still be returned in the query results since it has a `Person` label on it. +==== + +[discrete] +=== Relationships + +Based on the Perspective's purpose, it may be useful to limit the relationship types that are available for user exploration. +The Perspective designer lets you choose one or more relationship types from the list of available types in the graph, and hide them. +By default, all relationship types are visible. + +Similar to category styling, relationship type styling options for color, thickness, and rule-based styles are available in the xref:explore/explore-visual-tour/legend-panel.adoc[Legend panel]. + +[discrete] +=== Saved Cypher + +In the *Saved Cypher* tab of the Perspective designer, you can define _Search phrases_ and _Scene actions_. +xref:explore/explore-visual-tour/search-bar.adoc#search-phrase[Search phrase]s are defined and scoped for a particular Perspective, as they usually apply to a specific business view of the graph. +They are stored with the rest of the Perspective definition and run from the Search bar. +See xref:explore/explore-features/search-phrases-advanced.adoc[Search phrases for advanced queries] for how to define Search phrases. + +_Scene actions_ are Cypher queries you can run on the elements available in your current scene. +They are run from the context menu when at least one element is selected, see xref:explore/explore-features/scene-actions.adoc[Scene actions] for more information. \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-perspectives/perspectives.adoc b/modules/ROOT/pages/explore/explore-perspectives/perspectives.adoc new file mode 100644 index 000000000..26ff33482 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-perspectives/perspectives.adoc @@ -0,0 +1,73 @@ +:description: This section describes Perspectives in Explore. + +[[perspectives]] += Perspectives + +In Explore, a Perspective defines a certain business view or domain that can be found in the target Neo4j graph. +A single Neo4j graph can be viewed through different Perspectives, each tailored for a different business purpose. + +Perspectives define: + +* Categorization of business entities. +* Property visibility and value type. +* Relationship visibility. +* Styling (color, icon, caption). +* Custom Search phrases (see later section). + +== A business view of the graph + +Within a graph there are often multiple smaller graphs which are connected to each other. +Sometimes you need to see everything. +Other times it's helpful to have a more focused view. +Defining a Perspective allows you to select what parts of the graph to show and how to show them. + +The dataset used is the _Northwind_ link:https://neo4j.com/developer/example-data[example data set]. +Northwind is a fictional company with a database that tracks their product catalog, sales orders, and sales staff. + +.Northwind ER Diagram +image::image22.png[width=800] + +When importing Northwind directly into a Neo4j graph there is a 1:1 correspondence of tables to labels, which means that for each record a node has been created with a label that matches the original name of the table. +Each foreign key reference gets converted into a graph relationship. + +After connecting to the instance that contains this Neo4j database and launching Explore for the first time, Explore automatically generates a Perspective based on the data it finds. +If you have any previously defined Perspectives, they are available for selection. +You can always ask Explore to auto-generate a Perspective. +The auto-generated Perspective is a good place to start. +Explore categorizes the nodes into entities, select useful captions and assign color-coding. + +Keep in mind though, that when Explore auto-generates a Perspective, a complete scan of the database is performed. +If your database is large, i.e. > 10,000,000 nodes and relationships combined, this will take a long time and you can opt for a quick scan instead. +See xref:explore/explore-perspectives/database-scans.adoc[Database scans] for more information. +The Northwind example data set is _not_ large and Explore can quickly auto-generate a Perspective. + +By contrast, when Explore creates an Auto-perspective the first time you open it with a new database, it samples a node from each category it finds and use the properties in the sampled node. +As with any other perspective, as you query more data, Explore adds any new properties as they are found. + +You are able to search and explore the entire Northwind graph. + +.Northwind as a graph +[.shadow] +image::northwind-as-a-graph.png[width=800] + +While everyone in the organization could benefit from a graph view, not everyone needs to see everything. +For instance, the shipping department of Northwind may only need to see orders, products, and customers. +You can create another Perspective that highlights only those categories. + +.Northwind Shipping Perspective +[.shadow] +image::northwind-shipping-perspective.png[width=800] + +Similarly, you can create Perspectives that are specific to the sales department, purchasing department, or customer service department. + +.Northwind Sales Perspective +[.shadow] +image::northwind-sales-perspective.png[width=800] + +[.shadow] +.Northwind Purchasing Perspective +image::northwind-purchasing-perspective.png[width=800] + +[.shadow] +.Northwind Customer Perspective +image::northwind-customer-perspective.png[width=800] \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-perspectives/refresh-perspectives.adoc b/modules/ROOT/pages/explore/explore-perspectives/refresh-perspectives.adoc new file mode 100644 index 000000000..bbe28b097 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-perspectives/refresh-perspectives.adoc @@ -0,0 +1,27 @@ +:description: This section describes how to refresh a Perspective in Explore. +[[refresh-perspectives]] += Refresh Perspectives + +When changes are made to the database, for example by adding, removing, or changing property data types, these are automatically reflected in any existing Perspectives. +You can remove any unwanted automatically added categories, Explore does not automatically re-add them. + +However, if you use Explore with the plugin, such changes are *not* reflected automatically. +In order to make the changes available, click the "Refresh Perspective" button in the top right corner of the Perspective drawer. + +Keep in mind that this operation may take anywhere from a few seconds to several minutes, depending on the size of your database. + +[.shadow] +image::perspective-refresh-magnified.png[width=500] + +Once the Perspective is refreshed, new relationship types and property keys are added and data types for property keys are updated. +Any relationship types or property keys that were hidden before the refresh, remain hidden after. +If any labels, relationship types or property keys are deleted from the database, they are deleted from the Perspective as well. + +[.shadow] +image::property-key-refresh.png[width=800] + +However, new categories are not automatically created if new labels are added to the database, though the additional labels are available in the Perspective. +Similarly, if a label is removed from the database, the associated category is not automatically removed from the Perspective when you refresh. + +Also, note that if labels or properties have changed in the database, the change may affect styling rules and Search Phrases. +Those have to be updated manually after a Perspective refresh. \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-quick-start.adoc b/modules/ROOT/pages/explore/explore-quick-start.adoc new file mode 100644 index 000000000..0ae54e686 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-quick-start.adoc @@ -0,0 +1,50 @@ +:description: This section presents tips for a quicker start with Explore. +[[explore-quick-start]] += Quick start + +Explore is designed to be simple and intuitive enough for a business person or knowledge worker to pick up and use. +Follow these quick start tips if you would like to play with the interface on your own before returning to this guide to learn about the more advanced and nuanced features. + +You need an active connection to an instance that contains data, one of the link:https://neo4j.com/developer/example-data[example data sets] works. +Additionally, Explore needs a xref:explore/explore-perspectives/perspectives.adoc[Perspective] as a business view of the graph to which it connects. +The first time that Explore connects to a graph, it shows a selection of already defined Perspectives or, if you have the access rights, offer to auto-generate a new one. +Auto-generation is a good place to jump quickly into graph exploration. +Keep in mind that a complete scan of the database will be performed when you auto-generate a Perspective and if your database is large, this can take a long time. +In that case, you may opt for a quick scan instead. +See xref:explore/explore-perspectives/database-scans.adoc[Database scans] for more information. + +Graph exploration begins by searching for interesting parts of the graph. + +[.shadow] +image::explore-overview.png[width=800] + +== Start by searching + +By loading the _Northwind_ https://neo4j.com/developer/example-data[example data set], you can start interacting with the graph right away. +If you need help loading the dataset, the process is described in detail xref:import/introduction.adoc[here]. + +Once loaded, try searching for: + +* everything in a category, like _Products_. +* particular things in a category, like _Products with productName _Louisiana_. +* qualified patterns, like _Suppliers of Products with productName Louisiana_. +* long patterns, like _Customer purchase details about order for product with productName Louisiana_. +* generic patterns, like _Categories of Products with Suppliers_. + + +[NOTE] +==== +For faster search performance, it is highly recommended to set up indexes in the Neo4j database for all properties that should be searchable in Explore. +See link:{neo4j-docs-base-uri}/cypher-manual/current/indexes/[Cypher Manual -> Indexes]. +==== + +== Interact with the visualization + +With a currently displayed graph visualization you can: + +* zoom in and out using the buttons or scroll using a mouse or touchpad. +* double-click a node to see details. +* right-click to bring up a context menu and try the available options. +* short press click in an empty spot and drag to pan the visualization. +* long press click and drag to begin a marquee selection. +* click on the legend panel to select / deselect all nodes in a category. \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-visual-tour/card-list.adoc b/modules/ROOT/pages/explore/explore-visual-tour/card-list.adoc new file mode 100644 index 000000000..f4d0dc294 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/card-list.adoc @@ -0,0 +1,29 @@ +:description: This section describes the card list in Explore. + +[[card-list]] += Card list + +The card list, when expanded, shows details about the currently shown nodes on the canvas. +You can choose between viewing all or only the selected nodes (if any). +Each node appears as a little card which shows a few of the available properties on the node. +The search bar in the card list lets you filter the card list further by typing a search and returning only the matching cards. +The list can be even further refined by selecting _Nodes_ or _Relationships_ to return only those. + +[.shadow] +image::card-list.png[width=700] + +Cards in the list can be used to interact with nodes on the canvas. +Select one or more cards in the list to select them on canvas or vice versa. +Interact with the selected cards using shortcut actions like Expand or Dismiss that appear on the bottom of the list, or use the right-click context menu. + +Double-click on a card to see the Inspector, which shows its properties in detail. +Note that hovering a property shows you what type of property it is, i.e. string, integer, float etc. +Properties can be edited, if you have write access to the graph, see xref:explore/explore-features/edit-graph-data.adoc[Edit graph data] for more information. + +[.shadow] +image::node-inspector.png[width=300] + +The Inspector also shows a node’s relationships and neighbors as cards, which in turn, can be used to navigate to, interact with, or see detail about these relationships and neighbors. + +[.shadow] +image::relationships-of-a-node.png[width=300] diff --git a/modules/ROOT/pages/explore/explore-visual-tour/explore-overview.adoc b/modules/ROOT/pages/explore/explore-visual-tour/explore-overview.adoc new file mode 100644 index 000000000..03374753f --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/explore-overview.adoc @@ -0,0 +1,33 @@ +[[explore-overview]] += Explore overview +:description: This section describes how to use the Explore tool. + +[.shadow] +image::explore-overview.png[width=800] + +== Perspective drawer + +The xref:explore/explore-visual-tour/perspective-drawer.adoc[*Perspective drawer*] is where you can define the business context depicted in the scene. + +== Scene + +Explore's main workspace is a graph scene, where you'll see the graph visualization. +The scene contains just the parts of the graph which you've found through search or exploration. + +Click directly on nodes to move them manually into place. +Right-click on nodes, relationships, or the background to bring up context menus to perform actions. +See xref:explore/explore-visual-tour/scene-interactions.adoc[Scene interactions] for more information. + +To export your current scene, click the `Export visualization` icon in the upper right corner of your screen. +You may either take a screenshot and save as a .png, export the contents as CSV or share the Scene. + + + +== Overlays + +Overlays provide supplemental views for working with the graph scene. + +* *Legend panel* - shows all the business entities (categories and relationship types) available in the current Perspective. +This panel also lets you define the style for categories and relationship types using default or rule-based styles. +* *Search bar* - accepts a near-natural language search query input and offers suggestions on graph patterns that match the input. +* *Card list* - shows details about the nodes and relationships in the scene. \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-visual-tour/legend-panel.adoc b/modules/ROOT/pages/explore/explore-visual-tour/legend-panel.adoc new file mode 100644 index 000000000..f2abf22ea --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/legend-panel.adoc @@ -0,0 +1,94 @@ +:description: This section describes the Legend panel in Explore. + +[[legend-panel]] += Legend panel + +[.shadow] +image::legend-panel-intro.png[width=400] + +The legend panel shows a list of all categories and relationship types available in the current Perspective, along with the style used to render their nodes and relationships respectively. +When the list contains many elements, you can use a filter to limit the legend to show only elements present in the scene, or find those not present in the scene, or search for an element of interest. +Click on a category or relationship type in the legend to select all nodes or relationships of that type. +A count shows the number of items of a type that are currently visible somewhere in the scene. +Styles applied to nodes and relationships can also be changed from this legend panel. +You have the flexibility to define the style for an entire category or relationship type, or use data-driven rules to apply styles to specific nodes or relationships. +By using the arrow-button you can quickly collapse or expand the legend panel. + +== Default styling + +Using the default style, you can change the color and size of nodes or relationships that belong to a category or relationship type. +Additionally, it is possible to change the property (or add more) selected by default to caption the selected category of nodes or types of relationships. +You can also customize the caption's font size, make it bold, italic, or underlined, and change its placement on the node. +The same options are available for relationship captions, except for bold, italic, and underline. + +[.shadow] +image::captions.png[width=400] + +For node categories, you can assign an icon to further differentiate the category. + +In cases where a node has multiple labels mapped to different categories, the styling is determined by the category defined first in the Perspective. +See xref:explore/explore-perspectives/perspective-creation.adoc#perspective-categories[Categories] for more information. + + +== Rule-based styling + +Explore allows you to set up rule-based styling based on the properties present in your graph. +Rule availability and application varies by the type of a graph element and its available properties. +Rule-based styling is supported for string, numeric and boolean properties. +Temporal properties are also supported, `Date`, `Time`, `LocalTime`, `DateTime`, and `LocalDateTime`. +See xref:explore/explore-features/search-phrases-advanced.adoc#parameter-data-types[Parameter data types] for more information on temporal properties. + +There are three different modes for rule-based styling: _single_, _range_, and _unique values_. + +[discrete] +=== Single + +[.shadow] +image::rule-based-styling-single.png[width=800] + +This allows you to set up a rule that applies one single color, size and/or caption based on a condition. +For properties with numeric values, a histogram provides an overview of the values present in the current Scene. +The slider lets you select a value and apply rule-based styling based on this. + +For example, as shown above, a rule defined on a `discontinued` property of a `Product` category only applies to `Product` nodes that have a `discontinued` value set to `true`. +In this case, all affected nodes are presented in blue and have their `discontinued` value as their caption. + +If the property is a temporal type using timezones (`Time` and `DateTime`), you can base your styling on a selected timezone and translate all time values to that zone by checking the box _Translate timezones to_ and select a timezone. +(Note that _Z_ indicates _Zulu timezone_, ie. GMT, time offset +00:00.) +If you leave the box unchecked, timezones are ignored. + +[.shadow] +image::rule-based-time.png[width=300] + +[NOTE] +==== +Histograms are only available for the single mode of rule-based styling and for properties with numerical values of either `integer`, `float`, or temporal types. +If the selected property does not have a numerical value, the histogram is not available. +==== + +[discrete] +=== Range + +[.shadow] +image::rule-based-styling-range.png[width=800] + +For numeric properties, you can set up a rule that applies a range of colors or sizes to a range of values. +In the image above, a _Range_-rule has been used to style nodes with the `unitPrice` integer property with a spectrum of colors from green to red, as well as size nodes from small to big. + +For temporal properties using timezones (`Time` and `DateTime`), you have the same option to normalize to one timezone or to ignore timezones altogether as above with rules on a single value instead of a range of values. + +[discrete] +=== Unique values + +[.shadow] +image::rule-based-styling-unique-values.png[width=800] + +Activate this when you want to assign a unique color to each property value of a given property key. + + +[TIP] +==== +Rules override the default style setting such that if no rule is satisfied, the default style is applied. +If multiple rules affecting the same attribute (e.g. node color) are specified, the rule that appears first in the list is applied to that attribute. +Subsequent rules may still be applied if they affect other attributes (e.g. node size). +==== \ No newline at end of file diff --git a/modules/ROOT/pages/explore/explore-visual-tour/perspective-drawer.adoc b/modules/ROOT/pages/explore/explore-visual-tour/perspective-drawer.adoc new file mode 100644 index 000000000..5654d794f --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/perspective-drawer.adoc @@ -0,0 +1,12 @@ +:description: This section describes the Perspective drawer in Explore. + +[[perspective-drawer]] += Perspective drawer + +[.shadow] +image::perspective-drawer.png[width=400] + +The _Perspective_ is the business view, or the context, of the graph to which Explore connects. +The Perspective drawer is used to select or define this business view or context, before graph exploration can begin. +The business context set in the Perspective controls everything available in the Explore tool, e.g. what nodes and relationships that should be accessible, how they get categorized and styled, and what details about them can be seen or changed. +Perspectives are discussed in detail in xref::/explore/explore-perspectives/perspectives.adoc[Perspectives]. diff --git a/modules/ROOT/pages/explore/explore-visual-tour/scene-interactions.adoc b/modules/ROOT/pages/explore/explore-visual-tour/scene-interactions.adoc new file mode 100644 index 000000000..2625f9e91 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/scene-interactions.adoc @@ -0,0 +1,186 @@ +:description: This section describes Scene interactions in Explore. + +[[scene-interactions]] += Scene interactions + +Several interactions are available from the canvas to help you explore your graph visualization. +Some of the commonly expected ones are: + +* Zoom in and out using your mouse or touchpad scroll functions, or use the buttons at the bottom right of the canvas. +The size of the text on nodes is dynamic in relation to the size of the node. +* Hover over a node or a relationship to see its label and selected properties. +For nodes, but _not_ relationships, you can control what properties to display from the Perspective drawer. +Click on a label from the list of Categories and check/uncheck Captions from the available properties to select what to display in the tooltip. ++ +[.shadow] +image::tooltip-node-2.png[width=500] ++ +* Left-click on a single node or relationship to select or deselect it. Multiple objects can be selected by holding the appropriate keyboard modifier key (Cmd or Ctrl key) before selecting. +* Double-click on a node or relationship to open the Inspector to inspect the element’s details. +* Left-click in an empty spot on the canvas and drag immediately to pan the visualization. +* Left-click and hold and then drag to bring up a lasso tool to select multiple nodes and relationships. ++ +[.shadow] +image::lasso-tool.png[width=200] ++ +* Right-click anywhere on the canvas to bring up context-sensitive menus for the object(s) clicked on. +You can right-click on a single node or relationship, on a group of highlighted nodes and/or relationships, or on an empty spot on the canvas. ++ +[.shadow] +image::context-double.png[width=500] ++ +The following sections describe some of the notable graph interactions available in these context menus. + +[[select-related]] +== Select related nodes + +If you want to work with a node and its closest connected neighbors, you can select it and from the context menu _Select related nodes_. +Once selected, you can then dismiss the other (unselected) nodes and only have your nodes of interest in the Scene. +This action is also possible with multiple nodes selected. + +[[dismiss-single]] +== Dismiss single nodes + +As mentioned above, it is often convenient to display only connected nodes. +Without selecting any nodes or relationships, the context menu lets you _Dismiss single nodes_ to remove all nodes that are not related to any other visible nodes in the Scene. + +[[reveal-relationships]] +== Reveal relationships + +With a single or group of nodes selected, you can reveal direct relationships between them that are not already visible in your scene. +This option is available if relationships exist between selected nodes, provided that they are not already displayed. +Accordingly, if only one node is selected, the `Reveal relationships` is available only if the node in question has a relationship to itself. + +[.shadow] +image::reveal-relationships.png[width=500] + +[[expand-nodes]] +== Expand nodes + +With a single or group of nodes selected for context, you can expand the nodes to visualize their immediate neighbors. +Then, select from the result and expand further to navigate local areas of the graph. +Expansion can be done from the right-click context menu of a node or from the Inspector when viewing a node's relationships or neighbors. +// When expanding neighbors of a node, the number of nodes returned is limited to the number specified in the Node query limit in the xref:explore/explore-visual-tour/settings-drawer.adoc[Settings drawer]. + +[.shadow] +image::expand-nodes.png[width=500] + +The right-click context menu provides additional options to expand selectively along a specific relationship type and direction, or to open the Advanced Expansion dialog and choose to expand along several specific paths, or to specific neighboring node types, or a combination. +You can also choose to limit the number of nodes that should be returned in the result. +If you set a limit in the context menu, this overrides any Node query limit set in the Settings drawer. + +[.shadow] +image::advanced-expansion.png[width=500] + +== Shortest path + +A powerful feature of Neo4j graphs is to see how two entities may be connected without knowing the exact path of relationships between them. +To do so in Explore, you can run a shortest path command between two nodes. +Select the two nodes of interest, right-click on one of the nodes to bring up the context menu and select the Shortest Path option. + +[.shadow] +image::shortest-path.png[width=500] + +[NOTE] +Explore searches for shortest paths within 20 hops and shows the first shortest path found by the database. + +== Layouts + +In instances where you are interested in knowing more about _how_ various nodes are related in comparison to each other, Explore allows you to change the layout of your scene. +By default, the nodes and relationships in a Scene are presented in a _force-based_ layout. + +The _hierarchical_-layout option from the layout menu located at the bottom right-hand corner of the canvas, presents the nodes in the Scene in an hierarchical order instead. +The nodes are then arranged by the directionality of their relationships, determined by the way relationship directions are set up in the database. +When the hierarchical layout is activated, you can change the orientation with the edit-button directly to the right of the layout menu. + +[.shadow] +image::layouts-hierarchy.png[width=800] + +The third option is the _coordinate layout_ and it arranges, and fixes, the nodes on the canvas by their `integer`, `float`, or `point` type properties (provided that the nodes have them) and is used for geographical entities for example. +You can select which node property to use from the dropdown menu. + +If no property is selected for the x-axis, Explore automatically looks for any `point` property and if no such property exists, it looks for any property named _latitude_, then _lat_, and then _x_. +For the y-axis, the order is: `point`, any property named _longitude_, _long_, and lastly _y_. + +If some nodes already in the Scene do not have applicable properties when switching to the coordinate layout, they are placed on one side. + +Only properties with _numerical_ values are available, i.e. _not_ `string` properties. +For `point` properties, both two-dimension Cartesian and geographic (longitude and latitude) points are supported. +When geographic points are used, Mercator Projection is used as the map projection. + +You can scale both axes to find the right level of granularity for your dataset. + +[.shadow] +image::coordinate-layout.png[width=800] + +If you want to go back to the force-directed layout, just select the force-based layout from the layout menu. + +When using the force-based layout, Cytoscape is enabled by default. +This means that smaller graphs are laid out using a Cytoscape layout which is faster and makes the elements in the scene more readable, and it applies to graphs of <100 nodes and <300 relationships. +It can be disabled via the edit-button. + + + +== Map + +The map is located in the bottom right corner of the canvas and gives you an overview of the entire scene. +It helps you navigate, especially when your graph is large and/or when your nodes contain a lot of information and you often need to zoom in and out to view. + +The map shows all the nodes present in the scene, as well as the currently visible selection and where this selection is located in relation to the whole scene. +It allows you to pan the Scene by dragging the box that contains the current selection, you can zoom in and out using the `+` and `-`. + +_Presentation mode_ hides the search bar, legend panel and other elements to take the current Scene into full screen. +If you need the legend panel while in presentation mode, use the arrow-button to expand. + +Your current zoom-percentage is shown and by clicking that number, you reset the zoom to 100%. +In addition, you can select to fit the entire graph to the screen or hide the map. + +[.shadow] +image::map.png[width=300] + +== Filtering + +When you have a Scene full of nodes and relationships, it can be difficult to identify exactly the sub-graph you need. +Applying a _filter_ can help you fine-tune the results from your Search phrase and help you find what you are looking for in your data. +When a filter is applied, all filtered elements are greyed out in the Scene, they are still visible but you cannot interact with them. +You can also completely remove the filtered elements from the Scene, by using the `Dismiss Filtered elements`. + +[.shadow] +image::filtering-dismiss.png[width=800] + +Filters can be accessed from the Filter drawer and are created based on the elements present in your scene, their categories, types, and properties. +The filter can be as coarse or as fine as you like. + +To start, you select the node category or relationship type to base the filter on. +At that point, you have the option to filter out all other categories present in the Scene. +For more fine-grained filtering, you can further specify properties to filter on. +Filtering is supported for `integer`, `float`, `boolean`, `string`, `Date`, `Time`, `LocalTime`, `DateTime`, and `LocalDateTime` properties. +If the chosen property is numeric, a histogram gives you an overview of the values present in the current Scene. +The slider(s) allows you to set value(s) for your filter. +When you are satisfied, you use the toggle to apply the filter. + +[.shadow] +image::filtering-histogram.png[width=800] + +You can create as many filters as you like, they remain in the Filter drawer until you delete them. +When you have multiple filters, they are collapsed in the drawer and you click on them to expand them and see their details. + +=== Filtering on temporal properties + +If your data contains temporal values, either on nodes or relationships, you can filter on these properties. +Explore's support of temporal value types is aligned with the types supported in Neo4j. +For more information, see the link:https://neo4j.com/docs/cypher-manual/current/values-and-types/temporal/[Cypher Manual -> Temporal (Date/Time) values]. + +Timezones are supported for both `Time` and `DateTime` values. +You can configure your filter to use local time, ignoring any timezones, or to normalize to one time zone. +If you check the box _Translate timezones to_, you can select which timezone you want to use as your normal, based on your region. +(Note that _Z_ indicates _Zulu timezone_, ie. GMT, time offset +00:00.) + +[.shadow] +image::timezones.png[width=300] + +== Editing in Explore + +If you have the required write permissions to your graph database, you can edit your graph data in Explore. +You can edit labels and properties as well as create new nodes and relationships directly from your scene. +For more information, see xref:explore/explore-features/edit-graph-data.adoc[Edit graph data]. diff --git a/modules/ROOT/pages/explore/explore-visual-tour/search-bar.adoc b/modules/ROOT/pages/explore/explore-visual-tour/search-bar.adoc new file mode 100644 index 000000000..baf2decf9 --- /dev/null +++ b/modules/ROOT/pages/explore/explore-visual-tour/search-bar.adoc @@ -0,0 +1,88 @@ +:description: This section describes the search bar in Explore. + +[[search-bar]] += Search bar + +Explore is a search-first environment for you to explore your graph. +To provide this experience, the search bar supports several types of search input. +When you enter a term or phrase in the search bar, Explore provides a list of suggestions for queries you can run, based on matches in the following input types: + +* Search phrase +* Graph pattern +* Full-text search +* Actions + +[.shadow] +image::search-bar-5.png[width=500] +[.shadow] +image::search-bar-6.png[width=500] +[.shadow] +image::search-bar-7.png[width=500] + +[TIP] +==== +You can press or click on a suggestion in the list to select it, or scroll to the suggestion and press ENTER to run it. +==== + + +== Sample Search phrase + +When Explore autogenerates a Perspective (see xref:explore/explore-perspectives/perspective-creation.adoc[Creating a Perspective] for more information) or when you create your own (non-empty) Perspective, Explore provides a sample Search phrase to help you see the data in your graph. +The Search phrase is called _Show me a graph_ and is available in the search bar. +It returns a sample of your data. + +[.shadow] +image::show-me-a-graph.png[width=500] + +== Graph pattern + +Graph patterns are a relaxed, near-natural language grammar based on a vocabulary drawn from node labels, relationship types and property keys and indexed property values, enriched by categories or other configuration as defined in the applied Perspective (see xref:explore/explore-perspectives/perspectives.adoc[Perspectives] for more detail). +Terms that Explore detects are used to create potential pattern matches, are added to the suggestions list, from which you can pick the one you wish to query. +See xref:explore/explore-features/graph-pattern-search.adoc[Graph pattern search] for tips on graph pattern searching. + +[[search-phrase]] +== Search phrase + +A Search phrase is essentially an alias for a pre-defined graph query, which is saved within a Perspective. +Search phrases allow for user-friendly access to queries that need to be run frequently, or can't be conveniently expressed as a search pattern. +Search phrases also allow for highly customized domain-specific questions to be asked, and can: + +* be paired with a parameterized Cypher query. +* call algorithms, or anything else that can be called using procedures. +* modify the graph (requires write access). + +See xref:explore/explore-features/search-phrases-advanced.adoc[Search phrases for advanced queries] tutorial topic for tips on using Search phrases. + + +== Full-text search + +When Explore can’t find an appropriate suggestion for the entered search term, you have the ability to run a full-text search against the Neo4j database. +Explore uses the native full-text indexes in the database for this feature. +You will need to set up a full-text index to enable full-text search in Explore. +Without any full-text index configured, Explore will fall back to searching in all available indexed string properties. + +See xref:explore/explore-features//full-text-search.adoc[Full-text search] tutorial topic for tips on using the full-text search option. + +== Actions + +Actions are phrases that trigger user-interface commands when typed in the search bar, e.g. `Clear Scene` will empty the canvas of the currently shown nodes and relationships. +This lists some of the available Actions: + +* Invert selection - selects every unselected node and deselects any selected node/s. +* Fit to selection - zooms in on the selection and centers it on the canvas. +* Expand selection - option to see everything directly connected to the selected node/s. +* Clear Scene - empty the canvas. +* Dismiss - removes everything selected. +* Dismiss others - removes everything not selected. +* Refresh Data - refreshes the data on the canvas. +* Redo - repeat the latest action. +* Undo - undo the latest action. + +See xref:explore/explore-default-actions.adoc[Default actions and shortcuts] for the complete list and associated keyboard shortcuts. + + + + + + + diff --git a/modules/ROOT/pages/explore/introduction.adoc b/modules/ROOT/pages/explore/introduction.adoc new file mode 100644 index 000000000..b54ddbb57 --- /dev/null +++ b/modules/ROOT/pages/explore/introduction.adoc @@ -0,0 +1,27 @@ +:description: This section gives a short introduction to the Explore tool. +[[explore-introduction]] += Explore + +The Explore tool, powered by Neo4j Bloom, is a graph exploration tool for visually interacting with graph data. + +A graph puts information into context. +People, places, and things. +Products, services, and accounts. +Transactions, identities, and events. +Explore shows the patterns you intuitively know are there in your data, and reveals new patterns you may not have expected. + +[[explore-features]] + +The core set of Explore features are: + +* *Perspective* - the lens through which you view graph data, can be customized for different business purposes. +See xref:explore/explore-perspectives/perspectives.adoc[] for more information. +* *Visualization* - high performance, GPU-powered physics and rendering. +* *Exploration* - directly interacts with the data to explore connections and details. +* *Inspection* - see all the record details and browse to connected records. +* *Editing* - create records, connect data, update information. +* *Search* - find information, using advanced near-natural language Search phrases. + +Explore exists as a standalone tool as well, _Neo4j Bloom_. +Most features are identical, but some differences exist. +See the full documentation link:{neo4j-docs-base-uri}/bloom-user-guide/current[Neo4j Bloom] for more information. \ No newline at end of file diff --git a/modules/ROOT/pages/getting-started/connect-database.adoc b/modules/ROOT/pages/getting-started/connect-database.adoc new file mode 100644 index 000000000..5e77f23e3 --- /dev/null +++ b/modules/ROOT/pages/getting-started/connect-database.adoc @@ -0,0 +1,58 @@ +[[aura-connect-instance]] += Connect to an instance +:description: This page describes how to connect to an instance using Neo4j AuraDB. + +To interact with a database within an instance, you need to connect to it. + +There are different ways to connect to an instance from the tools, Explore or Query. +Either you connect to a running instance or you select a remote connection. + +== Remote connection + +image::connectionmodal.png[] + +== Connection banner + +If you are not connected to an instance when you open the Explore tool, you will be prompted to select an instance to connect to. +From the pop-up, you can also select _Remote connection_, if you want to connect to a different instance than the one currently running. + +Select *Status* to connect, disconnect, or connect to instances you recently accessed. +This is available from both tools as well from the Import service. + +image::connectionbanner.png[] + +== To open a remote instance from Explore or Query + +. Select *Explore* or *Query*. +. When prompted to choose a connection method, select _Remote_. +. Enter the *Database user* and *Password* credentials. +These are the same credentials you stored when xref:getting-started/create-database.adoc[creating the instance]. +. Select *Connect*. + + +[cols="20%,80%"] +|=== +| Field | Description + +|Protocol +|The protocol is used for the communication between the Neo4j database server and the client application or tool. +If you are a new user, you can use the default the default `neo4j+s//`. +For more information about connection schemes, see link:https://neo4j.com/docs/operations-manual/current/configuration/connectors/[Operations Manual -> Configure network connectors] and link:https://neo4j.com/docs/bolt/current/bolt/[Bolt Protocol]. + +|Connection URL +|You can get this from your instance details + +|Database user +|Neo4j by default + +|Password +|You are given the password when you initially create the instance + +|Single sign-on +|If this is set up, you can use SSO. + +|=== + +// == How to find the connection URI and password + +// image::password.png[] \ No newline at end of file diff --git a/modules/ROOT/pages/getting-started/create-database.adoc b/modules/ROOT/pages/getting-started/create-database.adoc new file mode 100644 index 000000000..3129aa57b --- /dev/null +++ b/modules/ROOT/pages/getting-started/create-database.adoc @@ -0,0 +1,23 @@ +[[aura-create-instance]] += Create an instance +:description: This page describes how to create a Neo4j AuraDB instance. + +To create a *Free* instance: + +. Navigate to the https://console.neo4j.io/?product=aura-db[Neo4j Aura Console] in your browser. +. Select *New Instance*. +. Copy and store the instance's *Username* and *password* or download the credentials as a `.txt` file. +. Tick the confirmation checkbox, and select *Continue*. + +[NOTE] +====== +You can create one Free instance per account. +====== + +image::newinstance.png[] + + + + + + diff --git a/modules/ROOT/pages/getting-started/data-modeling.adoc b/modules/ROOT/pages/getting-started/data-modeling.adoc new file mode 100644 index 000000000..0da8b1f2c --- /dev/null +++ b/modules/ROOT/pages/getting-started/data-modeling.adoc @@ -0,0 +1,13 @@ +[[quick-start-data-model]] += Model your data +:description: This section describes how to model data to prepapre for import. + +This section describes how to model data to prepapre for import. + +image::whiteboardfriendly.png[] + +Grab the modeling instructions from data importer docs. + +https://neo4j.com/docs/data-importer/current/ + +image::dataimporterdocs.png[] diff --git a/modules/ROOT/pages/import/file-provision.adoc b/modules/ROOT/pages/import/file-provision.adoc new file mode 100644 index 000000000..f577abd97 --- /dev/null +++ b/modules/ROOT/pages/import/file-provision.adoc @@ -0,0 +1,24 @@ +[[aura-file-provision]] += File provision +:description: This section describes how to provide files for import. + +In essence, you provide a set of files that contain the data to be imported and Import imports them into your instance. + +Import supports flat files, i.e. files that contain data in a tabular format where each row represents a record and each column represents a field in that record. +The most common format for such files is CSV (comma-separated values), but Import also supports TSV (tab-separated values). + +Import requires all files to have a header row and at least one row of data. +The header row speficies how the data in the file should be interpreted and contains information for each field. +For more information about CSV files and the header format, see link:{neo4j-docs-base-uri}/operations-manual/current/tools/neo4j-admin/neo4j-admin-import/#import-tool-header-format[Operations Manual -> CSV header format]. +Keep in mind that the column names must be unique, i.e. it is not possible to have two columns with the same name within the same file. + +The files are provided in the _Files_ panel of Import. +You can browse for them or drag and drop them into the panel. +Once a file is added to the panel, you can preview the header and the first row of data in the file by expanding the file. + +[.shadow] +image::files.png[] + +When you provide files to Import, they are temporarily stored on the client side until you run the import. +If you reload the page before running the import, the files are no longer available to the page and you need to provide them again. +This is due to security features of your browser. \ No newline at end of file diff --git a/modules/ROOT/pages/import/import.adoc b/modules/ROOT/pages/import/import.adoc new file mode 100644 index 000000000..ffdf0d5a6 --- /dev/null +++ b/modules/ROOT/pages/import/import.adoc @@ -0,0 +1,74 @@ +[[import]] +:description: This section describes how to do the actual import of data with Neo4h Import. += Run the import + +Once the files are provided, the data model complete, and all elements mapped, the import can be run. +However, you can _preview_ your data at any time and make sure that everything is mapped the way you expect before you run the actual import. + +[[preview]] +== Preview + +The preview button is located next to the _Run import_ button and unlike running the import, the preview does *not* require an active connection. + +image::dropdown.png[width=300] + +When you run a preview, only a sample of the provided data is scanned. +This means that the preview can differ from the final import in terms of connectedness, for example. +Even so, the preview can be very useful to get an overview of the data, especially on smaller datasets. + +Since the preview does not actually import any data, it can be run iteratively until you are satisfied. + +You can preview **all** or **selected** elements in your data. +If your model is particularly complex, it can be beneficial to preview only parts of the data. +To use this feature, select the parts of your model that you want to preview and _Preview selected_ from the dropdown. + +The preview shows a sample of either all or selected data that is mapped _correctly_ in the model. +Unlike the actual import, the preview can be run regardless of the completeness of the mapping. +If any element is missing the green checkmark in the model, it will _not_ be included in the preview, but the preview can still be run. + +[[run-import]] +== Run the import + +When you are happy with the model and the mapping is complete, the import can begin. +But before starting the import, it is important to make sure Import is connected to the database. +This is done in the connection dropdown located in the top center of the UI. + +// Add something about the DB switcher here, when that is available. + +image::connection-dropdown.png[] + +The _Run import_ button shows the progress of the import when you press it. +The import is done in batches and can be stopped at any time. + +When the import stops, whether because it is complete or because it was cancelled, a summary is displayed. +The summary contains information about the imported nodes and relationships, including time elapsed, the file size, the number of properties etc. +The results summary also allows you to see the Cypher statement used to load a particular file. +It is not advisable to copy and paste these statements, but seeing them can provide valuable insight into how constraints are created and how load statements are constructed. + +For nodes, there are two statements, a _key statement_ and a _load statement_. +The key statement is concerned with creating a constraint to ensure the uniqueness of the nodes. +The load statement creates nodes for every item in the mapped file and adds the assigned properties from the data model. + +For relationships, there is only a load statement. +It finds the start (source) and end (target) nodes and creates a relationship between them and sets the assigned (if any) properties to the relationship. + +// == Generate Cypher script + +// There may be situations where you want use the import logic elsewhere or where you need more complex transformations than Import allows. +// Once you have added your files and mapped the data, instead of running the import, you can generate the corresponding Cypher script representing the model and mapping. + +// The script can be used in the _Query_ tab of Workspace, provided that the files are accessible to the DBMS, or on the command line via Cypher shell, for example. + +// The generated code contains comments that help you understand how the load statement works and what different parts it consists of. +// This also helps you understand where you need to make changes to adapt it to where you intend to run it. + +// You can download the script with or without the files. + +// The _Generate Cypher script_ is available from the more menu. + +// image::generate-cypher.png[] + + + + +//== Errors \ No newline at end of file diff --git a/modules/ROOT/pages/import/indexes-and-constraints.adoc b/modules/ROOT/pages/import/indexes-and-constraints.adoc new file mode 100644 index 000000000..7ff83c88b --- /dev/null +++ b/modules/ROOT/pages/import/indexes-and-constraints.adoc @@ -0,0 +1,29 @@ +[[indexes-and-constraints]] +:description: This section describes how to use indexes and constraints in Import. += Indexes and constraints + +Import supports adding indexes to improve read performance of queries and creates constraints to ensure the accuracy of data. +They are found in the details panel and the tab is visible when a single node is selected in the data model panel. + +image::constraints-tab.png[] + +Once a node is mapped to a file and a property is selected to serve as its ID, both a constraint and an index are created automatically. + +== Constraints + +A uniqueness constraint is created on the node property selected as node ID. +This ensures that no other node with the same ID is created and to achieve that, a corresponding index is also created to support that constraint. +It is not possible to modify the uniqueness constraint nor to add any additional constraints. +For more information on constraints see link:https://neo4j.com/docs/cypher-manual/current/constraints/#unique-node-property[Cypher Manual -> Constraints]. + +== Indexes + +As mentioned previously, an index is created automatically on the assigned ID property for a node to support the uniqueness constraint. +This index cannot be modified in any way from this tab, but if you change which property to use as ID, both the constraint and corresponding index change accordingly. + +You can add more indexes with the `+` and then select which property to index from the dropdown menu. +If you know that you will regularly look at a specific property, it is good practice to add an index to that property. +For example in the link:https://neo4j.com/docs/getting-started/appendix/tutorials/guide-import-relational-and-etl/[Northwind] dataset, if you know you are going to be looking for orders in a specific date range, it is advisable to add an index to the `orderDate` property. + +Regardless of which property you add the index to, the index type is Neo4j's default index, which is `range` for Neo4j 5 and `btree` for Neo4j 4.x. +For more information on indexes, see link:https://neo4j.com/docs/cypher-manual/current/indexes/[Cypher Manual -> Indexes]. \ No newline at end of file diff --git a/modules/ROOT/pages/import/introduction.adoc b/modules/ROOT/pages/import/introduction.adoc new file mode 100644 index 000000000..b9b83d748 --- /dev/null +++ b/modules/ROOT/pages/import/introduction.adoc @@ -0,0 +1,10 @@ +:description: This is an introduction to the Import data service. += Import + +The import service contains a tool for importing data into your instance and is ideal to get started quickly with testing and prototyping. +It allows you to import data from flat files without using any code. +This means that you can import data from any source that can be exported to a flat file and does thus not require DBMS filesystem access. + +This service is also available as a standalone tool and is accessible at link:https://data-importer.neo4j.io/[] using a secure connection. +Additionally, Data Importer standalone is also available at link:https://data-importer.graphapp.io/[] with both secure and insecure connections. +For more information, see the link:https://neo4j.com/docs/data-importer/current/[Data Importer documentation]. \ No newline at end of file diff --git a/modules/ROOT/pages/import/mapping.adoc b/modules/ROOT/pages/import/mapping.adoc new file mode 100644 index 000000000..fb6e32007 --- /dev/null +++ b/modules/ROOT/pages/import/mapping.adoc @@ -0,0 +1,116 @@ +[[mapping]] +:description: This sections describes how to map files to a data model. += Mapping + +Mapping is the process of associating a file with an element in your data model. +This is what allows Import to construct the Cypher statements needed to load your data. +Your source files may contain data that is not relevant to your data model, and when you build your model, you can select what data to use. +Only data that is mapped correctly to the elements in your model is imported, so it is important to get the mapping right. + +[NOTE] +==== +If you need to change the mapping, it is possible to run the import again. +Affected elements already imported are updated and **not** duplicated. +==== + +== Nodes + +To map a node to a file, the node needs to have a label, which you can type directly on the node or in the mapping details panel. +After naming the label, you can select the file to map to the node. +Adding the file can be done at any time before running the import, but it is convenient to do it at this stage. + +[.shadow] +image::node-mapping.png[width=400] + +Additionally, the node needs to have at least one property and an ID. + +The properties are key-value pairs that describe the node. + +The ID is used to uniquely identify nodes and when connecting nodes to each other in relationships. +If a node with the same ID is seen more than once, it is only created for the first instance observed in the flat file. +If a node with the same ID is seen again, any properties are updated, resulting in the most recently read properties being kept. +As mentioned, the node ID is crucial when creating relationships and this is explained in further detail in the section on mapping <>. + +If you added the file already, you can choose to map properties from that file. +Import derives the properties from the columns in the file and guesses the data type. +With this option, you can select which properties to use. +Once selected, you can rename the properties, change the data type, if needed, and select which property should serve as the node ID. + +By default, Import uses the property with `id` in its name as the ID, but if none of the columns in the mapped file meet this condition, or if more than one does, you have to manually select which property to use as the node ID. +Whether you let Import select the ID or you do it manually, every node _needs_ to have an ID in order to complete the mapping. + +The property used as node ID is marked with a key icon. + +[.shadow] +image::node-id.png[width=400] + +[[mapping-relationships]] +== Relationships + +Much like how a node needs to have a label, a relationship needs to have a type. +This can be typed directly on the relationship or in the details panel. +The file to map the relationship to is selected in the same way as for nodes. Depending on your data, this file could be: + +* The same file as used for the nodes at both ends of the relationship. +In this case, Import automatically maps the file and appropriate columns. +It is easy for it to indentify the file columns to use in the _From_ and _To_ mapping, as they have already been mapped as ID properties to the nodes at each end. + +* A file that is used to define the node at only one end of the relationship, but also contains a column that contains the ID of the other node. +In this case, you need to manually select the file and specify the _From_ and _To_ mapping manually. +This is similar to a table in a relational database the contains a Foreign Key to link to another table, but here that key is used to link to another node rather than a table. + +* A completely separate file that is used solely to define the relationship. +In this case, you need to select the relevant file and then map the columns in the file that correspond to the _From_ and _To_ node ID properties. +This is similar to a _link table_ in relational database terms. + + +This part is crucial to ensuring the relationships link nodes as indended. It is defined in the _Node ID mapping_ section of the details panel. + +[.shadow] +image::relationship-mapping.png[width=400] + +== File filtering + +When mapping a file, both to nodes and relationships, you can use a toggle to filter the file. +This is useful when using aggregate node lists and relationship lists as source files. +Aggregate node lists contain all the nodes in the same file and they can be separated/grouped together by having the same value in a specific column. +Aggregate relationship lists contain corresponding information about relationships in one file and the relationships can be grouped together in the same fashion. +The file filtering allows you to select a column and an exact value to match and only the elements that match are used as a source for that element in your data model. + +[.shadow] +image::file-filtering.png[width=400] + +[[exclude-list]] +== Node exclude list + +Sometimes a source file may contain a column where multiple rows have the same string as the value, such as `[empty]` or `null`. +If this column is used as node ID, and you run the import, this results in the creation of "super nodes". +Every row in the mapped file that has such a value end up being connected to the same node, the "super node". +To avoid this, you can specify strings that should cause Import to exclude the rows they appear in. +By default, Import excludes any rows where the value of the node ID column is empty. + +The node exclude list is available from the more menu (`...`) in the data model panel, under _Settings_. + +image::node-exclude.png[width=300] + + +== Complete the mapping + +If the mapping is not complete, ie. if any element in the model is missing the green checkmark, the import can't be run. +If you try, Import sends an error message and highlights which element(s) in the model is missing information and also which fields in the details panel need to be filled out. + +For nodes, the following information is required: + +* Label - to identify the type of a node +* File - the source file for the node from which the properties are derived +* Properties - at least one property needs to be selected and if more than one, one needs to be selected as the node ID + +For relationships: + +* Type - a name that describes the relationship it represents +* File - the source file that contains information on which nodes are connected by the relationship +* Node ID mapping - which nodes in the model are connected by the relationship; their labels, IDs and ID columns. + +If the mapping is not complete, you can run a preview of the import, but it does not contain incompletely mapped elements. + +Once every element in the model has a green checkmark to indicate complete mapping, the import can be run. \ No newline at end of file diff --git a/modules/ROOT/pages/import/modeling.adoc b/modules/ROOT/pages/import/modeling.adoc new file mode 100644 index 000000000..79c866838 --- /dev/null +++ b/modules/ROOT/pages/import/modeling.adoc @@ -0,0 +1,63 @@ +:description: This section introduces data modeling. += Data modeling + +The data model is the is the blueprint for the database. +It defines how the data is organized and is the key to create a graph from your flat files. +The data model is what you map your flat files to. +It consists of nodes and relationships. +Nodes need to have a _label_ and one or more _properties_. +Relationships need to have a _type_ and one or more _properties_. + +//Add pointer to Graph Academy course on Data Modeling? + +The data model panel is located in the center of the screen. +It has buttons for collapsing the files panel, adding a node, discarding elements, previewing, running an import, and a more options button. + +[.shadow] +image::model-panel.png[] + +== Workflow + +The most efficient way to create your model is to complete the mapping of each element, ie. select source file, IDs, and properties, before moving on to the next element. +Being familiar with your files is essential to creating a good model. +See the section on xref:import/mapping.adoc[Mapping] for more information. + +== Create a node + +To create a node, click the _Add Node_ button. +The button is located in the top left corner of the data model panel. +As mentioned previously, the node needs a label and one or more properties. +The label can be typed directly on the node or in the _Label_ field in the details panel, to the right of the model panel. +The conventional way of labeling is to use CamelCase, see link:https://neo4j.com/docs/cypher-manual/current/syntax/naming/#_recommendations[Cypher Manual -> Recommendations] for more information on labeling. + +In addition to a label, the node needs to be mapped to a file, which is done in the field _File_, below the lable field, in the details panel. +The mapping is not necessary to create the node, nor is adding properties, but both need to be done before the import can be run. +See xref:import/mapping.adoc[Mapping] for more information on mapping. + +== Create a relationship + +To create a relationship, it is necessary to have at least one node already. +If you hover over a selected node, a grey circle with a green plus sign appear on top of the blue cirlce. + +[.shadow] +image::node-relationship.png[] + +The plus sign can be dragged to an empty space on the canvas and once released, a new node is created with a relationship to the first node. +However, if you already have two nodes, you can just drag the plus sign from one node to the other and a relationship is created. + +You can type directly on a selected relationship to specify the relationship type. +This can be done in the details panel as well. +The casing convention for relationship types is upper-case SNAKE_CASE, see link:https://neo4j.com/docs/cypher-manual/current/syntax/naming/#_recommendations[Cypher Manual -> Recommendations] for more information. + +The relationship needs to be mapped to a file and have at least one property, but again, this is not necessary to create the relationship. +The section on xref:import/mapping.adoc[Mapping] covers this. + +A relationship always has a direction, and if needed, you can reverse the direction in your model with a button, as shown below. + +[.shadow] +image::relationship.png[] + +== Deleting elements + +Elements can be deleted from the model by selecting them and either clicking the trash icon, or using the delete key on your keyboard. +You can select all elements with kbd:[⌘+a] on Mac or kbd:[Ctrl+a] on Windows and delete them all at once. diff --git a/modules/ROOT/pages/import/visual-tour.adoc b/modules/ROOT/pages/import/visual-tour.adoc new file mode 100644 index 000000000..643c464be --- /dev/null +++ b/modules/ROOT/pages/import/visual-tour.adoc @@ -0,0 +1,41 @@ +[[Overview]] +:description: This section provides an overview of the Import user interface. += Visual tour + +[.shadow] +image::upx-import.png[] + +== Files panel + +The source files for the import are placed here, either you drag and drop or browse for them. +Each file can be expanded using the dropdown option, to display the header and the first row of the file. +The `...` menu allows you to delete the file. +See xref:import/file-provision.adoc[] for more information about files. + +== Data model panel + +The center of the UI is the canvas used to create the data model on. +When you have a model, this panel is where you can see if there are errors in mapping. +See xref:import/modeling.adoc[] for more information about the data model. + +== Add node + +This button adds a node to the data model, **not** to the database. +See xref:import/modeling.adoc[] about how to create the data model. + +== Delete selection + +Select one or more elements on the canvaas and then use this button to delete them. + +== More menu + +The `...` menu contains options to open a saved model, with or without data, to save your current model, with or without data, settings for the import, and an option to clear everything. +For more information on the settings, see xref:import/mapping.adoc#exclude-list[Node exclude list]. + +== Details panel + +The details panel contains two tabs, _Definition_ and _Constraints & Indexes_. +The _Defintion_ tab is where you give labels to nodes and relationships, map them to files from the files panel, and specify their properties. +See xref:import/mapping.adoc[] for more information. +The _Constraints & Indexes_ tab allows you to see details about constraints and indexes and lets you add or modify the latter. +See xref:import/indexes-and-constraints.adoc[] for more information. \ No newline at end of file diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index 500b6fde9..a6e4b3e24 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -1,23 +1,29 @@ [[aura]] -= Neo4j Aura overview -:description: This page introduces the Aura platform. += About Neo4j Aura Console +:description: Introduce the new Aura console experience. -Neo4j Aura is a fast, scalable, always-on, fully automated graph platform offered as a cloud service. +Neo4j Aura is a fully automated graph platform offered as a cloud service. +It brings together the capabilties of several tools, services, and operations from the Neo4j catalog. +To get started with Neo4j Aura, log in at link:https://console-preview.neo4j.io/account/profile[], or click "Get Started Free" at the top of the page. -Aura includes AuraDB, the graph database as a service for developers building intelligent applications, and AuraDS, the graph data science as a service for data scientists building predictive models and analytics workflows. +The Neo4j Aura console, or **console** for short, is the new UI experience for Neo4j Aura users. +Use the console to import and interact with your data — from visualizing nodes and relationships to executing queries with the Cypher query language. +You can monitor your instances and databases via metrics and logs to get insight into various aspects, such as performance, resource usage, and overall system health. -== Neo4j AuraDB -Neo4j AuraDB is the fully managed graph database as a service that helps build intelligent, context-driven applications faster with lightning-fast queries, real-time insights, built-in developer tools, data visualization, and integrations supported by the largest graph developer community. +The Aura environment starts with an organization which can contain multiple projects with multiple users associated. +Projects, users, and billing can all be managed directly from the same console. -For more information on AuraDB, see the xref:auradb/index.adoc[Neo4j AuraDB overview]. +If you have used Aura before, you will find the console familiar but with a host of new features. +The classic Aura console is still available as the default experience, and will remain available until all available features have been integrated into the new console. -== Neo4j AuraDS -Neo4j AuraDS is the fully managed data science as a service solution for data scientists that unifies the machine learning (ML) surface and graph database into a single workspace, making it easy to uncover the connections in big data and answer business-critical questions. +*Comparison to the classic console* + +* Some features, such as metrics, have moved to the panel on the left. +* **Projects** are an evolution of **Tenants**. +* The new console's left navigation now provides access to tools, marking a significant change from the classic console's concept of "opening" the instance. +* The process for creating an instance remains unchanged. -For more information on AuraDS, see the xref:aurads/index.adoc[Neo4j AuraDS overview]. (C) {copyright} License: link:{common-license-page-uri}[Creative Commons 4.0] -// Edit at: https://github.com/neo4j-graphacademy/courses/blob/main/asciidoc/courses/neo4j-fundamentals/promo.adoc -include::https://raw.githubusercontent.com/neo4j-graphacademy/courses/main/asciidoc/courses/neo4j-fundamentals/promo.adoc[] diff --git a/modules/ROOT/pages/auradb/managing-databases/advanced-metrics.adoc b/modules/ROOT/pages/managing-databases/advanced-metrics.adoc similarity index 100% rename from modules/ROOT/pages/auradb/managing-databases/advanced-metrics.adoc rename to modules/ROOT/pages/managing-databases/advanced-metrics.adoc diff --git a/modules/ROOT/pages/auradb/managing-databases/backup-restore-export.adoc b/modules/ROOT/pages/managing-databases/backup-restore-export.adoc similarity index 100% rename from modules/ROOT/pages/auradb/managing-databases/backup-restore-export.adoc rename to modules/ROOT/pages/managing-databases/backup-restore-export.adoc diff --git a/modules/ROOT/pages/managing-databases/database-actions.adoc b/modules/ROOT/pages/managing-databases/database-actions.adoc new file mode 100644 index 000000000..2a5d15b18 --- /dev/null +++ b/modules/ROOT/pages/managing-databases/database-actions.adoc @@ -0,0 +1,195 @@ +[[instance-actions]] += Instance actions +:description: This page describes the following instance actions - rename, resest, upgrade, resize, pause, resume, clone to a new database, clone to an existing database, or delete and instance. + +Perform multiple instance actions directly from an instance card: Pause/resume, develop, view instance details, clone to new instance/clone to existing instance, edit secondaries, delete, resize, view resources/view all metrics. + +image::instanceactions.png[] + +== Instance details + +From the instance card, select the more menu (*...*) then select *instance details*. +From the instance details you can rename an instance, view instance details and we explain them in the instance actions docs. + +image::instancedetails.png[] + +// == Reset an instance + +// label:AuraDB-Free[] +// label:AuraDB-Professional[] + +// You can clear all data in an instance using the *Reset to blank* action. + +// To reset an instance: + +// . Select the more actions (*...*) button on the instance you want to reset. +// . Select *Reset to blank* from the resulting menu. +// . Select *Reset*. + +// == Upgrade an instance + +// === Upgrade from Free to Professional + +// You can upgrade an AuraDB Free instance to an AuraDB Professional instance using the *Upgrade to Professional* action. + +// Upgrading your instance clones your Free instance data to a new Professional instance, leaving your existing Free instance untouched. + +// To upgrade a Free instance: + +// . Select the ellipsis (*...*) button on the free instance you want to upgrade. +// . Select *Upgrade to Professional* from the resulting menu. +// . Set your desired settings for the new instance. For more information on AuraDB instance creation settings, see xref:auradb/getting-started/create-database.adoc[]. +// . Tick the *I understand* checkbox and select *Upgrade Instance*. + +// === Upgrade from Professional to Business Critical + +// You can upgrade an AuraDB Professional instance to an AuraDB Business Critical instance using the *Upgrade to Business Critical* action. + +// Upgrading your instance clones your Professional instance data to a new Business Critical instance, leaving your existing Professional instance untouched. + +// To upgrade a Business Critical instance: + +// . Select the ellipsis (*...*) button on the free instance you want to upgrade. +// . Select *Upgrade to Business Critical*. +// . Set your desired settings for the new instance. +// For more information on AuraDB instance creation settings, see xref:auradb/getting-started/create-database.adoc[]. +// . Tick the *I understand* checkbox and select *Upgrade Instance*. + +== Resize an instance + +Resizing an instance means changing the memory, CPU and storage size. + +// label:AuraDB-Professional[] +// label:AuraDB-Enterprise[] +// label:AuraDB-Business-Critical[] + +You can change the size of an existing instance using the *Resize* action. + +To resize an instance: + +. Select the *resize* button on the instance you want to resize. +. Select *Resize* from the resulting menu. +. Select the new size you want your instance to be. +. Tick the *I accept* checkbox and select *Resize*. + +An instance remains available during the resize operation. + +== Pause an instance + +Pausing a Neo4j instance temporarily stops the database, which means: + +* No Access to Data: The data stored in the database becomes inaccessible. +Any applications or users trying to connect to the instance won't be able to run queries or retrieve data until the instance is resumed. + +* No Processing: The database won't process any operations or transactions while it is paused. +Any ongoing operations are halted. + +* Data is Preserved: Your data remains safe and unchanged while the instance is paused. +When you resume the instance, you can pick up right where you left off. + +Pausing is putting the database on hold without shutting it down completely, so you can restart it quickly when needed. + +// label:AuraDB-Professional[] +// label:AuraDB-Enterprise[] +// label:AuraDB-Business-Critical[] + +[NOTE] +==== +You cannot manually pause an AuraDB Free instance; they are paused automatically after 72 hours of inactivity. footnote:[Inactivity is when you perform no queries on the instance.] +==== + +You can pause an instance when not needed and resume it at any time. +Do so by using the *Pause* button on the instance card. + +After confirming, the instance begins pausing, and a play button replaces the pause button. + +[NOTE] +==== +Paused instances run at a discounted rate compared to standard consumption, as outlined in the confirmation window. +You can pause an instance for up to 30 days, after which point Aura automatically resumes the instance. +==== + +=== Resume a paused instance + +Resume a paused instance with the *Play* button on the instance card. + +After confirming, the instance begins resuming, which may take a few minutes. + +[WARNING] +==== +Aura Free instances do not automatically resume after 30 days. +If an Aura Free instance remains paused for more than 30 days, Aura deletes the instance, and all information is lost. +==== + +== Clone an instance + +You can clone an existing instance to create a new instance with the same data. +You can clone across regions, and from Neo4j version 4 to Neo4j version 5. + +There are two options to clone an instance: + +* Clone to a new instance +* Clone to an existing instance + +You can access all the cloning options from the more menu (*...*) on the instance. + +[NOTE] +==== +You cannot clone from a Neo4j version 5 instance to a Neo4j version 4 instance. +==== + +=== Clone to a new instance + +. From the more menu (*...*) on the instance you want to clone, select *Clone To New* from the contextual. +. Set your desired settings for the new database. +For more information on AuraDB database creation, see xref:getting-started/create-database.adoc[]. +. Check the *I understand* box and select *Clone Database*. ++ +[WARNING] +==== +Make sure that the username and password are stored safely before continuing. +Credentials cannot be recovered afterwards. +==== + +=== Clone to an existing instance + +When you clone an instance to an existing instance, the database connection URI stays the same, but the data is replaced with the data from the cloned instance. + +[WARNING] +==== +Cloning into an existing instance will replace all existing data. +If you want to keep the current data, take a snapshot and export it. +==== + +. From the more menu (*...*) on the instance you want to clone, select *Clone To Existing* and then *AuraDB* from the contextual menu. +. If necessary, change the database name. +. Select the existing AuraDB database to clone to from the dropdown menu. ++ +[NOTE] +==== +Existing instances that are not large enough to clone into will not be available for selection. +In the dropdown menu, they will be grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. +==== ++ +. Check the *I understand* box and select *Clone*. + ++ +[NOTE] +==== +Existing instances that are not large enough to clone into will not be available for selection. +In the dropdown menu, they are grayed out and have the string `(Instance is not large enough to clone into)` appended to their name. +==== ++ +. Tick the *I understand* checkbox and select *Clone*. + + +== Delete an instance + +Delete an instance using the trashcan icon on the instance card. + +Type the exact name of the instance (as instructed) to confirm your decision, and select *Destroy*. + +[WARNING] +==== +There is no way to recover data from a deleted Aura instance. +==== diff --git a/modules/ROOT/pages/managing-databases/develop.adoc b/modules/ROOT/pages/managing-databases/develop.adoc new file mode 100644 index 000000000..9108cf328 --- /dev/null +++ b/modules/ROOT/pages/managing-databases/develop.adoc @@ -0,0 +1,14 @@ +[[aura-develop]] += Develop +:description: This page describes the instance details. + +The **Develop** button on the instance card is where you can connect your instance to another application via Neo4j drivers. +Drivers are available for the following programming languages: + +* Python +* Java +* JavaScript +* .NET +* Go + +image::develop.png[] \ No newline at end of file diff --git a/modules/ROOT/pages/managing-databases/instance-details.adoc b/modules/ROOT/pages/managing-databases/instance-details.adoc new file mode 100644 index 000000000..36d08d3dd --- /dev/null +++ b/modules/ROOT/pages/managing-databases/instance-details.adoc @@ -0,0 +1,78 @@ +[[aura-instance-details]] += Instance details +:description: This page describes the instance details. + +image::instancedetailsexpanded.png[] + +== Rename an instance + +You can change the name of an existing instance using the *Rename* action. +Open *instance details* to rename the instance. + +To rename an instance: + +. From the more menu (*...*) on the instance you want to rename, select *Instance details*. +This opens the *Instance details* panel on the right side of the screen. +. Select the pen icon next to the instance name. +. Rename your instance. +. Select the tick button. + +== Instance details + +As mentioned previously, the instance details can be accessed via the more menu (*...*) on the instance card. + +[cols="1,1"] +|=== +| Detail | Description + +|Region +|Where servers are located + +|Version +|The version of the Aura database + +|Connection URI +|Use this to connect to an instance + +|Private URI +|Applicable if you have a private link set up + +|ID +|Every instance has with an ID which is a unique identifier. +It means multiple instances can have the same instance name, because they are distinguishable by their unique ID. + +|Memory +|The capacity of your instance. + +|CPU +|Aura provides database as a service through public cloud providers. +It runs on container technology and this allows for the AuraDB Instance to allocate dedicated CPU resources. + +|Storage +|Neo4j Aura automates the backup process (you can also create your own on-demand snapshots), storing your data securely in the cloud. +Backups are saved in the storage bucket of the cloud provider in the same region as your Neo4j Aura instance. + +|Encryption key +|Neo4j Managed Key encrypts your data + +|=== + + +== Snapshots + +Snapshots are backups of your data. +The data in your instance can be backed up, exported, and restored using snapshots. +A snapshot is a copy of the data in an instance at a specific point in time. + +Neo4j regularly takes snapshots of your instance, and you can request a snapshot to be taken on demand. +These snapshots can be used to restore data to a different Neo4j instance. + +// == Import instance + +// _Feature coming soon!_ + +// == Logs + +// If something goes wrong, the logs are a good place to start. +// The standard log is called `neo4j.log` and it contains general information about Neo4j. +// There is one for each DBMS and it can be accessed directly from Desktop via the Developer menu. It opens in a separate window, which allows you to keep it in the background. diff --git a/modules/ROOT/pages/managing-databases/instance-resources.adoc b/modules/ROOT/pages/managing-databases/instance-resources.adoc new file mode 100644 index 000000000..dd1103b14 --- /dev/null +++ b/modules/ROOT/pages/managing-databases/instance-resources.adoc @@ -0,0 +1,25 @@ +[[aura-instance-resources]] += Instance resources +:description: Interesting description goes here + +Metrics about the resources that are crucial for maintaining the performance and stability of your database instances. +Monitoring these metrics helps you assess resource usage, anticipate potential issues, and make informed decisions about scaling your infrastructure. + +To view additional metrics, simply tab "See all metrics" from the instance card, or "Metrics" from the left hand panel. + +== CPU Usage + +CPU usage (cores). CPU is used for planning and serving queries. +If this metric is constantly spiking or at its limits, select `resize` on the instance card, to increase the size of your instance. + +== Storage + +Amount of disk space reserved to store user database data, in bytes. +Ideally, the database should all fit into memory (page cache) for the best performance. +Keep an eye on this metric to make sure you have enough storage for today and for future growth. +Check this metric with page cache usage to see if the data is too large for the memory and consider increasing the size of your instance in this case. + +== Query Executions + +The total number of Out of Memory Errors for the instance. +Consider increasing the size of the instance if any OOM errors. \ No newline at end of file diff --git a/modules/ROOT/pages/managing-databases/logs.adoc b/modules/ROOT/pages/managing-databases/logs.adoc new file mode 100644 index 000000000..bbfb081a4 --- /dev/null +++ b/modules/ROOT/pages/managing-databases/logs.adoc @@ -0,0 +1,3 @@ +[[aura-Logs]] += Logs +:description: Interesting description goes here \ No newline at end of file diff --git a/modules/ROOT/pages/auradb/managing-databases/monitoring.adoc b/modules/ROOT/pages/managing-databases/monitoring.adoc similarity index 92% rename from modules/ROOT/pages/auradb/managing-databases/monitoring.adoc rename to modules/ROOT/pages/managing-databases/monitoring.adoc index 27390cefb..cc48d8972 100644 --- a/modules/ROOT/pages/auradb/managing-databases/monitoring.adoc +++ b/modules/ROOT/pages/managing-databases/monitoring.adoc @@ -1,11 +1,11 @@ [[aura-monitoring]] -= Monitoring += All metrics label:AuraDB-Professional[] label:AuraDB-Enterprise[] label:AuraDB-Business-Critical[] -You can monitor the following metrics of an AuraDB instance from the *Metrics* tab: +You can monitor the following metrics of an instance from the *Metrics* tab: * *CPU Usage (%)* - The amount of CPU used by the instance as a percentage. * *Storage Used (%)* - The amount of disk storage space used by the instance as a percentage. diff --git a/modules/ROOT/pages/platform/create-account.adoc b/modules/ROOT/pages/platform/create-account.adoc index 8ef34f5a3..8c1dbf7dc 100644 --- a/modules/ROOT/pages/platform/create-account.adoc +++ b/modules/ROOT/pages/platform/create-account.adoc @@ -1,5 +1,5 @@ [[aura-create-account]] -= Creating an account += Create an account :description: This page describes how to create a Neo4j Aura account. To access Neo4j Aura, you need to have an Aura account. diff --git a/modules/ROOT/pages/platform/user-management.adoc b/modules/ROOT/pages/platform/user-management.adoc deleted file mode 100644 index 3da6117cc..000000000 --- a/modules/ROOT/pages/platform/user-management.adoc +++ /dev/null @@ -1,105 +0,0 @@ -[[aura-user-management]] -= User management -:description: This page describes how to manage users in Neo4j Aura. - -User management is a feature within Aura that allows you to invite users and set their roles within an isolated environment. - -== Tenants - -Tenants are the primary mechanism for granting users access to an Aura environment. - -The tenant you're currently viewing is displayed in the header of the Console. -You can select the tenant name to open the tenant dropdown menu, allowing you to view all the tenants that you have access to and switch between them. - -Additionally, you can perform the following actions from the tenant dropdown menu: - -* Copy the _Tenant ID_ of any tenant in the list by selecting the clipboard icon that appears when you hover over the tenant. -* Edit the name of the tenant you are currently viewing by selecting the pencil icon next to the tenant. This action requires you to be an _Admin_ of the tenant. - -== Users - -Each tenant can have multiple users with individual accounts allowing access to the same environment. - -The users with access to a tenant can be viewed and managed from the **User Management** page. -You can access the **User Management** page by selecting **User Management** from the sidebar menu of the Console. - -=== Roles - -Users within a tenant can be assigned one of the following roles: - -* _Admin_ -* _Member_ -* _Viewer_ - -:check-mark: icon:check[] - -.Roles -[opts="header",cols="3,1,1,1"] -|=== -| Capability | Admin | Member | Viewer -| View users and their roles | {check-mark} | {check-mark} | {check-mark} -| View and open instances | {check-mark} | {check-mark} | {check-mark} -| Access the Neo4j Customer Support Portal | {check-mark} | {check-mark} | {check-mark} -| Perform all actions on instances footnote:[Actions include creating, deleting, pausing, resuming, and editing instances.] | {check-mark} | {check-mark} | -| Clone data to new and existing instances | {check-mark} | {check-mark} | -| Take on-demand snapshots | {check-mark} | {check-mark} | -| Restore from snapshots | {check-mark} | {check-mark} | -| Edit the tenant name | {check-mark} | | -| Invite new users to the tenant | {check-mark} | | -| Edit existing users' roles | {check-mark} | | -| Delete existing users from the tenant | {check-mark} | | -| View and edit billing information | {check-mark} | | -|=== - -[NOTE] -==== -Each tenant must have at least one _Admin_, but it is also possible for tenants to have multiple _Admins_. -==== - -=== Inviting users - -As an _Admin_, to invite a new user: - -. Select **Invite user** from the **User Management** page. -. Enter the **Email** address of the person you want to invite. -. Select the user's **Role**. -. Select **Invite**. - -The new user will appear within the list of users on the **User Management** page with the _Pending invite_ **Status** until they accept the invite. - -An email will be sent to the user with a link to accept the invite. - -=== Editing users - -As an _Admin_, to edit an existing user's role: - -. Select the pencil icon next to the user's name from the **User Management** page. -. Select the user's new **Role**. -. Select **Save changes**. - -=== Deleting users - -As an _Admin_, to delete an existing user: - -. Select the trash can icon next to the user's name from the **User Management** page. -. Select **Delete**. - -[NOTE] -==== -It is also possible to delete a user whose **Status** is _Pending invite_. - -Select the trash can icon next to the user's name, and then select **Revoke**. -==== - -=== Accepting an invite - -When invited to a tenant, you will receive an email with a link to accept the invite. -This link will direct you to the Aura Console, where a **Tenant invitation** modal will appear. -You can select the tenant(s) you have been invited to and choose to accept or decline the invite(s). - -You can also close the **Tenant invitation** modal without accepting or declining the invite(s) and later manually re-open the modal by selecting the **Pending invites** envelope icon in the Console header. - -[TIP] -==== -User management within the Aura Console does not replace built-in roles or fine-grained RBAC at the database level. -==== diff --git a/modules/ROOT/pages/query/introduction.adoc b/modules/ROOT/pages/query/introduction.adoc new file mode 100644 index 000000000..fc90637e7 --- /dev/null +++ b/modules/ROOT/pages/query/introduction.adoc @@ -0,0 +1,13 @@ +:description: This section introduces the Query tool for querying data. +[[query-introduction]] += Query + +Query is a tool that allows you to write and execute Cypher queries and visualize the results. +It is a way to interact with the graph with the main focus on: + +* Writing and running graph queries with Cypher. +* Exportable results of queries. +* Graph visualization of query results containing nodes and relationships. + +A similar experience is available with Neo4j Browser. +See the link:https://neo4j.com/docs/browser-manual/current/[Neo4j Browser] documentation for more information. \ No newline at end of file diff --git a/modules/ROOT/pages/query/operations.adoc b/modules/ROOT/pages/query/operations.adoc new file mode 100644 index 000000000..0048d11fd --- /dev/null +++ b/modules/ROOT/pages/query/operations.adoc @@ -0,0 +1,289 @@ +:description: This section describes the basic operations in Query +[[query-operations]] += Query operations + + +[[result-frames]] +== Result frames + +There are a variety of ways to view data in Neo4j Browser. +All queries that you run in the Cypher editor populate a reusable result frame. +Query results are rendered as: + +* Visual graph -- graph result frame. +* Table -- table result frame. +* Meta data -- RAW result frame. + +You can switch between them in the top left corner of the result frame. + + +[[graph-result-frame]] +=== Graph result frame + +The graph visualization functionality is designed to display a node-graph representation of the underlying data stored in the database in response to a given Cypher query. +The visual representation of the graph is useful for determining areas of interest or assessing the current state and structure of the data. + +[.shadow] +image:graph-result-frame.png[] + +[NOTE] +==== +A squiggly line anywhere in your query indicates a warning. +This is most commonly caused by a query attempting to match a pattern not present in the graph. +Hover over the underlined segment to see the explanation. +==== + +Tips for navigating the graph view: + +* Use the controls in the bottom right corner of the frame to zoom in and out of the visualization. +Additionally, you can zoom using trackpad zoom gestures or a mouse wheel in combination with a modifier key. +(If you are in full-screen view, the modifier key is not needed to zoom.) +On Mac, use `⌘ + scroll` and on Windows and Linux, use `Ctrl + scroll` to trigger zoom. +You can also use the _Fit to screen_ button to fit all query results into the view. +* Click a node or a relationship to view its properties. +The nodes already have sensible captions assigned by the Browser, which auto-selects a property from the property list to use as a caption. +To change what your graph looks like, see xref:query/operations.adoc#styling[Styling]. +* Right-click a node to: +** Dismiss/hide a node. +** Expand/collapse child relationships. +** Unpin the node to re-layout it. +Alternatively, you can click the node and drag it around. +* If you cannot see the whole graph or the results display too close together, you can adjust by moving the visual view and dragging nodes to rearrange them. +* To move the view to see more parts of the graph, click an empty spot within the graph pane and drag it. + + + +[[table-result-frame]] +=== Table result frame + +The *Table* result view displays the result in a table format. +It also reports the query time, including the actual query execution time, latency, and deserialization costs. + +[.shadow] +image:table.png[] + + +[[raw-result-frame]] +=== RAW result frame + +The *RAW* result view displays the submitted request, the Neo4j Server version and address, and the response. +It also reports the query time, including the actual query execution time, latency, and deserialization costs. + +[.shadow] +image:raw.png[] + +[[styling]] +== Styling + +You can customize your graph query results directly in the result frame based on node labels and relationship types. + +[.shadow] +image::query-styling.png[width=800] + +If you select a node label in the _Overview_, there are several styling options available: + +* Color -- set the color for nodes of the selected label. +* Size -- set the size for nodes of the selected label. +* Caption -- set what should be displayed as the caption for nodes of the selected label. + +[.shadow] +image::node-styling.png[width=400] + +If you select a relationship type in the _Overview_, there are several styling options available: + +* Color -- set the color for relationships of the selected type. +* Line width -- set the line width for relationships of the selected type. +* Caption -- set what should be displayed as the caption for relationships of the selected type. + +[.shadow] +image::relationship-styling.png[width=350] + +== Query parameters + +Query supports querying based on parameters. +It allows the Cypher query planner to re-use your queries instead of parse and build new execution plans. + +Parameters can be used for: + +* literals and expressions +* node and relationship IDs + +Parameters cannot be used for the following constructs, as these form part of the query structure that is compiled into a query plan: + +* property keys +* relationship types +* labels + +Parameters may consist of letters and numbers and any combination of these but cannot start with a number or a currency symbol. + + +[TIP] +==== +For more details on the Cypher parameters, see link:https://neo4j.com/docs/cypher-manual/current/syntax/parameters/[Cypher Manual -> Parameters^]. +==== + + +[[set-params]] +=== Set query parameters + +You can set a parameter to be sent with your queries by using the `:param` command. +Using parameters rather than hard-coded values allows for the reuse of the query plan cache. + +The `+:param name => 'Example'+` command defines a parameter named `name`, which will be sent along with your queries. + +The right hand side of `=>` is sent to the server and evaluated as Cypher with an implicit `RETURN` in front. +This gives better type safety since some types (especially numbers) in JavaScript are hard to match with Neo4j:s type system. +To see the list of all currently set query parameters and their values, use the `:params` command. +For more information on how to use the commands, see `:help param` and `:help params`. + + +// [NOTE] +// ==== +// If you are using a multi-database DBMS, parameters cannot be declared when using the `system` database. +// Switch to a different database and declare, then switch back to the `system` database and use them. +// ==== + + +.Set a parameter as an integer +==== +[source, query command, role=noheader] +---- +:param x => 1 +---- +==== + + +.Set a parameter as a float +==== +[source, query command, role=noheader] +---- +:param x => 1.0 +---- +==== + + +.Set a parameter as a string +==== +[source, query command, role=noheader] +---- +:param x => "Example" +---- +==== + + +.Set a parameter as an object +===== + +. Map ++ +[source, query command, role=noheader] +---- +:param obj1 => ({props: {productName: "Chai", productID:1}}) +---- ++ +[source, parameter, role=nocopy] +.The obj1 parameter +---- +$obj1 = {"props": {"productName": "Chai", "productID": 1}} +---- ++ +[NOTE] +==== +Maps like `{x: 1, y: 2}` must be wrapped in parentheses `({x: 1, y: 2})`. +==== ++ +. List ++ +[source, query command, role=noheader] +---- +:param obj2 => [1, 2, 3, 4] +---- ++ +[source, parameter, role=nocopy] +.The obj2 parameter +---- +$obj2 = [1, 2, 3, 4] +---- + +===== + + +.Cypher query example with a parameter +===== + +[source, query command, role=noheader] +---- +:param name => 'Chai'; +---- + +[source, cypher, role=noplay] +---- +MATCH (p:Product) +WHERE p.productName = $name +RETURN p +---- + +[NOTE] +==== +You need to run the `:param` command separately from the `MATCH` query. +==== + +===== + +[[clear-params]] +=== Clear parameters + +You can clear all currently set parameters from Query by running: + + +[source, query command, role=noheader] +---- +:params {} +---- + + +=== Set several parameters + +You can set several parameters with the `:params` command, this also clears all currently set parameters. + + +[NOTE] +==== +Integers are set to float with this style. +==== + + +.Set several parameters +==== +[source, query command, role=noheader] +---- +:params {x: 1, y: 2.0, z: 'abc', d: null, e: true, f: false} +---- + +[source, parameter, role=noheader] +---- +$x = 1.0 +$y = 2.0 +$z = "abc" +$d = null +$e = true +$f = false +---- +==== + +=== Parameter assistance + +If you run a query using parameters without first declaring them all, Queryreturns a `ParameterMissing` error and lists the missing parameter(s). +You can click the provided template to populate the editor with the command for setting parameters and all you have to do is enter the value(s) for the missing parameter(s). +Since the result frame is reusable, once you have set your parameter(s), you can run the same Cypher query again without having to re-enter it. + +image::params-assist.png[] + +[NOTE] +==== +The command offered with parameter assistance is always `:params` even if you only have one parameter. +==== + +=== Duration for the query parameters + +Parameters are not saved when you close Query. +You can save a `:params` command to your Saved Cypher to quickly populate parameters again. \ No newline at end of file diff --git a/modules/ROOT/pages/query/visual-tour.adoc b/modules/ROOT/pages/query/visual-tour.adoc new file mode 100644 index 000000000..b041cad5b --- /dev/null +++ b/modules/ROOT/pages/query/visual-tour.adoc @@ -0,0 +1,130 @@ +[[query-overview]] += Query overview +:description: This section describes how to use the Query tool. + +[.shadow] +image::upx-query.png[width=800] + +== Connection dropdown + +If you are **not** connected to an instance, the dropdown lets you either select from recent instances or to specify a new instance. +Once you have entered your credentials, if needed, the status shows **Connected** and you are ready to start querying. +This dropdown is also where you can switch database, instance, or disconnect. + +[.shadow] +image::query-connection-dropdown.png[width=400] + +[.shadow] +image::query-connected-dropdown.png[width=300] + + +== Sidebar + +The sidebar contains a set of drawers; database information, saved Cypher, and Query history. + +=== Database information + +This drawer contains information about the database you are connected to. +It gives you an overview of the node labels and relationship types, as well as what property keys exist in the database. +If you click one, you will see a sample of the selected element as a graph or table. + +[.shadow] +image::database-drawer.png[width=400] + +Additionally, the drawer contains node and relationship counts, displayed in parantheses. + +=== Saved Cypher + +The Saved Cypher drawer is where you keep your bookmarked queries and commands. + +[.shadow] +image::saved-cypher-drawer.png[width=400] + +From here, you can organize your saved Cypher, download or upload these, or delete them if needed. +To run a saved query, click on it to populate it to the Cypher editor and use the play button to execute. + +To save a query, use the bookmark icon in the Cypher editor. + +[.shadow] +image::save-cypher.png[width=800] + + +=== Query history + +This drawer contains a list of your previously run queries, for your reference. +Queries are kept here until you delete them and are not limited to the current instance. + +== Cypher editor + +The Cypher editor is the primary interface for entering and running Cypher queries and commands. +The editor can be instantiated several times, which allows you to edit the query inside the result frame and rerun it. +It can hold multiple lines for long queries or commands. + +=== Syntax highlighting + +* A smart highlight of matching pairs around the current position of the cursor, for example, matching brackets, braces, and parenthesis. +* Matching pairs are auto-closed. +* A smart highlight of identical words on a word click. +* Words, such as attributes, anon name, and values, are highlighted in different colors. +* Any punctuation, such as parenthesis and comma, has a slightly different color than text. +* Warnings are displayed with a red squiggly line that displays the error if you hover. + +.Useful shortcuts +[cols="3,2,2",options="header"] +|=== +| Description +| Keyboard shortcut (Mac OS) +| Keyboard shortcut (Windows and Linux) + +| Select highlighted identical words one by one. +| *command + D* +| *Ctrl + D* + +| Select all highlighted identical words. +| *command + shift + L* +| *Ctrl + shift + L* + +| Move a query line up and down. +| *ALT + arrow* +| *ALT + arrow* + +| Delete a query line. +| *command + shift + K* +| *Ctrl + shift + K* + +| Add multiple cursors, if you want to add several lines at the same time. +| *command + ALT + arrow* +| *Ctrl + ALT + arrow* + +| Search and replace. +| *command + F* +| *Ctrl + F* + +| Run a query. +| *command + enter* +| *Ctrl + Enter* +|=== + +== Reusable result frames + +The reusable result frames in Query allow you to edit the query of an existing result directly in the result fram and rerun it to update the result in situ. +You can also use _Cmd/Ctrl + click_ to send it back to the main editor and re-run it from there. + +Query supports different result frame views: + +* Graph -- Display the result as nodes and relationships and allow xref:query/operations.adoc#styling[styling] to be configured. +* Table -- Display the result as JSON formatted rows. +* RAW -- Display the submitted request, the Neo4j Server version and address, and the response. + +== Stream + +A stream is a scrolling series of result frames. + +image:stream.png[] + +A reusable result frame is created for each command execution, added to the top of the stream to create a scrollable collection in reverse chronological order. +You can expand and collapse the result frames using the *Collapse* icon. +To remove all the frames from the stream, use the `:clear` command. +Clearing the stream does **not** clear the history, that is done from the **Query history** drawer, as mentioned previously. + + diff --git a/modules/ROOT/pages/tutorials/bi.adoc b/modules/ROOT/pages/tutorials/bi.adoc deleted file mode 100644 index bf8f28109..000000000 --- a/modules/ROOT/pages/tutorials/bi.adoc +++ /dev/null @@ -1,179 +0,0 @@ -= Using the BI Connector - -In this tutorial we use the Neo4j Connector for BI to read graph data from an Aura instance using some common <<_using_command_line_sql_clients,SQL clients>> and <<_using_bi_tools,BI tools>>. - -[CAUTION] -==== -This tutorial includes instructions on the usage of third-party software, which may be subject to changes beyond our control. In case of doubt, please refer to the third-party software documentation. -==== - -== Downloading the connector - -Download the connector from the https://neo4j.com/download-center/#integrations[Download Center]. Depending on the SQL client or BI tool it will be used with, you will need either the JDBC or the ODBC connector; see the usage examples for further details. - -== Preparing example data - -Before trying the connector with any of the listed tools, some data needs to be loaded on Aura. -This can be achieved by running the following Cypher query in the Neo4j Browser: - -[source, cypher, subs=attributes+, role=noplay] ----- -CREATE - (john:Person {name: "John", surname: "Doe", age: 42}), - (jane:Person {name: "Jane", surname: "Doe", age: 40}), - (john)-[:KNOWS]->(jane) ----- - -== Using BI tools - -Commonly used BI tools include <<_tableau>> (which uses the JDBC driver) and <<_power_bi>> (which uses the ODBC driver). - -[TIP] -==== -When connecting with a JDBC driver, the `neo4j+s` URI scheme must be changed into `neo4j` and the `SSL=true` parameter must be added to the URL. -==== - -=== Tableau - -[NOTE] -==== -This example requires https://www.tableau.com/en-gb/products/desktop[Tableau Desktop]. - -Refer to the link:https://help.tableau.com/current/pro/desktop/en-us/examples_otherdatabases_jdbc.htm[Tableau documentation] for more information on how to add a JDBC database. -==== - -After downloading the JDBC Neo4j Connector for BI from the https://neo4j.com/download-center/#integrations[Download Center]: - -- Close any running instances of Tableau Desktop. -- Copy the Neo4j driver to the appropriate Tableau drivers folder (e.g. `C:\Program Files\Tableau\Drivers` on Windows, or `~/Library/Tableau/Drivers` on macOS). -- Start Tableau and search for the `Other Databases (JDBC)` option. -- Insert the Aura URL as `jdbc:neo4j://xxxxxxxx.databases.neo4j.io?SSL=true`, leave the SQL dialect as `SQL92`, and complete the relevant credentials. - -If the connection fails with a `Generic JDBC connection error`, you can do one of the following: - -* Download the SSL.com CA root certificate from link:https://www.ssl.com/how-to/install-ssl-com-ca-root-certificates/[ssl.com] and install it as explained in the link:https://help.tableau.com/current/pro/desktop/en-us/jdbc_ssl_config.htm[Tableau documentation], then restart Tableau and repeat the previous steps (recommended option). -* Add `&sslTrustStrategy=TRUST_ALL_CERTIFICATES` to the connection string (after `SSL=true`) and try to connect again. **This option requires caution and should not be used in a production environment**. - -After the connection is established, you can select the `neo4j` database and the `Node` schema to find the `Person` table. -You can then explore the table to find the example data. - -=== Power BI - -[NOTE] -==== -This example requires Microsoft Windows and https://powerbi.microsoft.com/en-us/desktop/[Power BI Desktop]. - -Refer to the link:https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-connect-using-generic-interfaces[Power BI documentation] for more information on how to add an ODBC database. -==== - -After downloading and installing the ODBC Neo4j Connector for BI from the https://neo4j.com/download-center/#integrations[Download Center]: - -- Open Power BI Desktop. -- Search for `ODBC` in the *Get data from another source* panel. -- Select `Simba Neo4j` in the *DSN dropdown* menu. -- Insert the connection string `Host=xxxxxxxx.databases.neo4j.io;SSL=1` in the *Advanced options* section. -- Insert your username and password. - -Once connected, open sequentially `ODBC` -> `neo4j` -> `Node` -> `Person` in the *Navigator* window to see a preview of the table. - -== Using command-line SQL clients - -In order to run SQL queries, we need a SQL client that can use a custom driver. -Common JDBC-based command-line SQL clients include <<_sqlline>> and <<_jdbcsql>>. - -[TIP] -==== -When connecting with a JDBC driver, the `neo4j+s` URI scheme must be changed into `neo4j` and the `SSL=true` parameter must be added to the URL. -==== - -=== sqlline - -https://github.com/julianhyde/sqlline[`sqlline`^] is a command-line tool for issuing SQL queries to relational databases via JDBC. -To clone and build it, run the following: - -[source, shell, subs=attributes+] ----- -$ git clone https://github.com/julianhyde/sqlline -$ cd sqlline -$ ./mvnw package ----- - -We now need to make the BI connector driver available to `sqllite`. -This can be done by extracting the `Neo4jJDBC42.jar` file from the downloaded _JDBC BI connector_ into the `sqlline/target` folder. - -The `sqlline` client can now be run as follows: - -[source, shell, subs=attributes+] ----- -$ ./bin/sqlline -d com.simba.neo4j.neo4j.jdbc42.Driver ----- - -From the client prompt, it is possible to connect to the Aura instance by supplying the username and password when prompted to do so: - -[source, shell, subs=attributes+] ----- -sqlline> !connect jdbc:neo4j://xxxxxxxx.databases.neo4j.io?SSL=true ----- - -When the connection is established, a list of tables can be obtained with the `!tables` command: - -[source, shell, subs=attributes+] ----- -jdbc:neo4j://xxxxxxxx.databases.neo4j.io> !tables ----- - ----- -+-----------+--------------+---------------------+------------+---------+----------+------------+-----------+--------+ -| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_CAT | TYPE_SCHEM | TYPE_NAME | SELF_R | -+-----------+--------------+---------------------+------------+---------+----------+------------+-----------+--------+ -| neo4j | Node | Person | TABLE | | | | | | -| neo4j | Relationship | Person_KNOWS_Person | TABLE | | | | | | -+-----------+--------------+---------------------+------------+---------+----------+------------+-----------+--------+ ----- - -It is also possible to run SQL queries: - -[source, shell, subs=attributes+] ----- -jdbc:neo4j://xxxxxxxx.databases.neo4j.io> SELECT * FROM Person; ----- - ----- -+----------+-----+------+---------+ -| _NodeId_ | age | name | surname | -+----------+-----+------+---------+ -| 0 | 42 | John | Doe | -| 1 | 40 | Jane | Doe | -+----------+-----+------+---------+ ----- - -=== jdbcsql - -http://jdbcsql.sourceforge.net/[jdbcsql^] is a command-line tool that can be used to connect to a DBMS via a JDBC driver. - -After downloading the `jdbcsql-1.0.zip` file from https://sourceforge.net/projects/jdbcsql/files/[SourceForge^], extract it into the `jdbcsql` folder; then, copy the `Neo4jJDBC42.jar` file from the downloaded _JDBC BI Connector_ into `jdbcsql` and make the following changes: - -1. Add the following lines to `JDBCConfig.properties` -+ ----- -# neo4j settings -neo4j_driver = com.simba.neo4j.neo4j.jdbc42.Driver -neo4j_url = jdbc:neo4j://host?SSL=true ----- - -2. Add `Neo4jJDBC42.jar` to `Rsrc-Class-Path` line in `META-INF/MANIFEST.MF` - -Now run the following command (replacing `xxxxxxxx.databases.neo4j.io` with the Aura connection URI, and `yyyyyyyy` with the actual password): - -[source, shell, subs=attributes+] ----- -$ java org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader -m neo4j -h xxxxxxxx.databases.neo4j.io -d neo4j -U neo4j -P yyyyyyyy 'SELECT * FROM Person' ----- - -The result of the query is: - ----- -"_NodeId_" age name surname -0 42 John Doe -1 40 Jane Doe ----- \ No newline at end of file diff --git a/modules/ROOT/pages/tutorials/create-auradb-instance-from-terminal.adoc b/modules/ROOT/pages/tutorials/create-auradb-instance-from-terminal.adoc deleted file mode 100644 index 80f85994b..000000000 --- a/modules/ROOT/pages/tutorials/create-auradb-instance-from-terminal.adoc +++ /dev/null @@ -1,101 +0,0 @@ -[[create-auradb-instance-in-terminal]] -= Create an AuraDB instance in the terminal -:description: This tutorial describes using the terminal to create an instance in the Aura Console. - -This tutorial describes using the terminal to create an instance in the Aura Console. - -== Preparation - -=== Generate API credentials - -* Log in to the Aura Console. -* Click your email address in the top right corner and select *Account details*. -* In the *API credentials* section, select *Create*. -Enter a descriptive name and save the generated Client ID and Client Secret. - -=== cURL -* Install cURL via your terminal -* For macOS with Homebrew: use `brew install curl`. -* Install cURL. -See link:https://curl.se/dlwiz/[curl download wizard] for more information. -* Check cURL is available: Type `curl -V` in the terminal - -== Obtain a bearer token - -[NOTE] -==== -Bearer tokens are valid for one hour. -==== - -In the terminal paste the snippet, replacing `YOUR_CLIENT_ID` and `YOUR_CLIENT_SECRET` with the values generated by the Aura Console. -Keep the `:` between the values. - -[source, cURL] ----- -curl --location 'https://api.neo4j.io/oauth/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' -u 'YOUR_CLIENT_ID:YOUR_CLIENT_SECRET' -v ----- - -=== Response body example - -Save the `access_token` from the end of the returned code. -This is your bearer token. -It looks similar to this example: - -[source, cURL] ----- -"access_token":"eyJ1c3IiOiJkNzI2MzE1My03MWZmLTUxMjQtOWVjYy1lOGFlM2FjNjNjZWUiLCJpc3MiOiJodHRwczovL2F1cmEtYXBpLmV1LmF1dGgwLmNvbS8iLCJzdWIiOiJFSDdsRTgwbEhWQVVkbDVHUUpEY0M1VDdxZ3BNTnpqVkBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9jb25zb2xlLm5lbzRqLmlvIiwiaWF0IjoxNzAyOTgzODQzLCJleHAiOjE3MDI5ODc0NDMsImF6cCI6IkVIN2xFODBsSFZBVWRsNUdRSkRjQzVUN3FncE1OempWIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImFKbWhtUTlYeExsQmFLdHNuZnJIcCJ9..jkpatG4SCRnxwTPzfEcSJk3Yyd0u_NMH8epNqmSBMUlp_JvvqbKpNdkPIE6vx5hLRgVCVKovxl4KY9yzEkr7R5s4YU3s2K25eNB1q1y3yQ_-9N0e6eOhmjIrsWHMd_rl2NuGIHo6pHihumuJlEg-U2ELkWyu8Iz3zQxjycVnPHzlbu7sbtwVJdU7UzgO12jgDLA1T4mUqvxdAAdnoXO57SwczYoYKY2YL61CMTn-xdQ6MFS8A3vwpGQbRirwVVxvEmoIPCLlQwHeEC4_modJ4cifmjt6ChJb1sxsRpFvdNHm0vNcLjy-96e88D50AMgjvS4VQCmVKA7kUgt7t5IpKg","expires_in":3600,"token_type":"Bearer" ----- - -== Obtain the tenant ID - -Use cURL to obtain the tenant ID with your token. -Replace `YOUR_BEARER_TOKEN` with your token. - -[source, cURL] ----- -curl --location 'https://api.neo4j.io/v1/tenants' --header 'Accept: application/json' --header 'Authorization: Bearer YOUR_BEARER_TOKEN' ----- - -This returns something similar to: - -[source, cURL] ----- -{"data":[{"id":"6e6bbbe2-5678-5f8a-1234-b1f62f08b98f","name":"team1"},{"id":"ad69ee24-1234-5678-af02-ff8d3cc23611","name":"team2"}]} ----- - -In the example response above, two tenants are returned. -If you’re a member of multiple tenants, select the one you wish to use. - -== Configure an AuraDB instance - -=== Configure the instance values - -Use the bearer token and Tenant ID to create the Aura instance. -Replace `YOUR_BEARER_TOKEN` with your token. -Replace `YOUR_TENANT_ID` with your tenant ID. - -The following values are customizable `version`, `region`, `memory`, `name`, `type`, `tenantid`, and `cloud provider`. - - -[source, cURL] ----- -curl --location 'https://api.neo4j.io/v1/instances' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer YOUR_BEARER_TOKEN' --data ' { "version": "5", "region": "europe-west1", "memory": "8GB", "name": "instance01", "type": "enterprise-db", "tenant_id": "YOUR_TENANT_ID", "cloud_provider": "gcp" }' ----- -See xref:platform/api/overview.adoc[Aura API documentation] for more details. - -At this point, an Aura instance is provisioned in the Aura Console. -Optionally, use this code in the terminal to check the status: - -[source, cURL] ----- -curl --location 'https://api.neo4j.io/v1/instances/YOUR_INSTANCE_ID' --header 'Accept: application/json' --header 'Authorization: Bearer YOUR_BEARER_TOKEN' ----- - -*Response* - -[source, cURL] ----- -curl --location 'https://api.neo4j.io/v1/instances/YOUR_INSTANCE_ID' --header 'Accept: application/json' --header 'Authorization: Bearer YOUR_BEARER_TOKEN' ----- - -If the value of `status` shows `running`, you can start using the new Aura instance. \ No newline at end of file diff --git a/modules/ROOT/pages/tutorials/migration.adoc b/modules/ROOT/pages/tutorials/migration.adoc deleted file mode 100644 index ab75c3553..000000000 --- a/modules/ROOT/pages/tutorials/migration.adoc +++ /dev/null @@ -1,100 +0,0 @@ -= Migrate from self-managed Neo4j to Aura -:description: This section describes how to migrate from a self-managed Neo4j database to Aura. -:database: neo4j -:dump-folder: /dumps/neo4j -:aura-uri: neo4j+s://xxxxxxxx.databases.neo4j.io - -This tutorial describes how to migrate from a self-managed Neo4j database to Aura. - -[CAUTION] -==== -If your local Neo4j version is older than 4.3, you need to upgrade to at least Neo4j 4.3 first as explained in link:https://neo4j.com/docs/upgrade-migration-guide/current/version-4/[Upgrade and Migration Guide -> Neo4j 4 upgrades and migration]. -==== - -== Preparation - -=== Migrating to Neo4j 5 - -If you are migrating from self-managed Neo4j 4.3 or 4.4 to Neo4j 5 on Aura, carefully read the xref:tutorials/upgrade.adoc#_preparation[Preparation section in the Upgrade tutorial] to ensure you are well prepared for the migration. - -=== Aura instance size - -Before starting, verify that the Aura instance you are migrating to is sized accordingly. -The instance must be at least as large as your self-managed database to accommodate the data. -The Aura RAM-to-storage ratio is 1:2, which means, for example, that a 32 GB Aura instance provides 64 GB of storage. - -=== APOC compatibility - -If you are using any APOC procedures and functions, make sure they are all available in Aura by checking the link:https://neo4j.com/docs/aura/platform/apoc/[APOC support page]. - -== Creating and uploading a database dump - -In order to move data from your self-managed database to Aura, you need to create a dump of the existing database. - -[NOTE] -==== -This process requires a short downtime for your self-managed database. -==== - -The following admin commands must be invoked with the same user as your self-managed Neo4j database. -This guarantees that Neo4j has full rights to start and work with the database files you use. - -. Stop your self-managed Neo4j database. -If you are running an Enterprise Edition, you can stop only the database you want to dump using the command `STOP DATABASE {database}` in Cypher Shell or Browser. - -. Ensure the target directory to store the database dumps (for instance `{dump-folder}`) exists. - -. Depending on your self-managed Neo4j version, create a dump of your database (e.g., `{database}`) using one of the following options: - -+ -[.tabbed-example] -==== -[.include-with-From-Neo4j-4] -===== -Use the link:https://neo4j.com/docs/operations-manual/4.4/backup-restore/offline-backup/[`neo4j-admin dump`] command. - -[source,shell,subs=attributes+] ----- -bin/neo4j-admin dump --database={database} --to={dump-folder} ----- -===== - -[.include-with-From-Neo4j-5] -===== -Use the link:https://neo4j.com/docs/operations-manual/current/backup-restore/offline-backup/[`neo4j-admin database dump`] command. - -[source,shell,subs=attributes+] ----- -bin/neo4j-admin database dump {database} --to-path={dump-folder} ----- -===== -==== -+ - -. Depending on your self-managed Neo4j version, upload the database dump (e.g., `{database}`) to your Aura instance using one of the following options: - -+ -[.tabbed-example] -==== -[.include-with-From-Neo4j-4] -===== - -Use the link:https://neo4j.com/docs/operations-manual/4.4/tools/neo4j-admin/push-to-cloud/[`neo4j-admin push-to-cloud`] command. - -[source,shell,subs=attributes+] ----- -bin/neo4j-admin push-to-cloud --dump={dump-folder}/file.dump --bolt-uri={aura-uri} --overwrite ----- -===== - -[.include-with-From-Neo4j-5] -===== -Use the link:https://neo4j.com/docs/operations-manual/current/tools/neo4j-admin/upload-to-aura/[`neo4j-admin database upload`] command. - -[source,shell,subs=attributes+] ----- -bin/neo4j-admin database upload {database} --from-path={dump-folder} --to-uri={aura-uri} --overwrite-destination=true ----- -===== -==== -+ \ No newline at end of file diff --git a/modules/ROOT/pages/tutorials/performance-improvements.adoc b/modules/ROOT/pages/tutorials/performance-improvements.adoc deleted file mode 100644 index 1d5a975f0..000000000 --- a/modules/ROOT/pages/tutorials/performance-improvements.adoc +++ /dev/null @@ -1,115 +0,0 @@ -[[aura-performance]] -= Improving Cypher performance - -This page covers a number of steps you can take to improve the Cypher performance of your workload. - -== Cypher statements with literal values - -One of the main causes of poor query performance is due to running many Cypher statements with literal values. -This leads to inefficient Cypher processing as there is currently no use of parameters. -As a result, you don't benefit fully from the execution plan cache that would occur otherwise. - -The following Cypher queries are identical in form but use different literals: - -[source, cypher, role=noplay] ----- -MATCH (tg:asset) WHERE tg.name = "ABC123" -MERGE (tg)<-[:TAG_OF]-(z1:tag {name: "/DATA01/" + tg.name + "/Top_DOOR"}) -MERGE (tg)<-[:TAG_OF]-(z2:tag {name: "/DATA01/" + tg.name + "/Data_Vault"}) ----- - -In cases like this, query parsing and execution plan generation happen multiple times, resulting in a loss of efficiency. -One way to solve that is by rewriting the former example as follows: - -[source, cypher, role=noplay] ----- -MATCH (tg:asset) WHERE tg.name = $tgName -WITH tg -UNWIND $tags as tag -MERGE (tg)<-[:TAG_OF]-(:tag {name: tag.name}) ----- - -By replacing the literal values in the queries with parameters you get a better execution plan caching reuse. -Your application needs to place all the values in a parameter list and then you can issue one statement that iterates through them. -Making these changes will lead to improvements in execution and memory usage. - -== Review queries and model - -One first action that you can take is reviewing and listing all your Cypher queries. -The best starting point is to have a good understanding of the sequence and frequency of the Cypher queries submitted. - -Additionally, if the queries are generated by a framework, it is essential to log them in Cypher form to make reviewing easier. - -You can also profile a Cypher query by prepending it with `EXPLAIN` (to see the execution plan without running the query) or `PROFILE` (to run and profile the query). -Read more about link:{neo4j-docs-base-uri}/cypher-manual/current/query-tuning/#how-do-i-profile-a-query[profiling a query]. - -[NOTE] -==== -When using `PROFILE` you may need to run it multiple times in order to get the optimal value. -The first time the query runs, it gets a full cycle of evaluation, planning, and interpreting before making its way into the query cache. -Once in the cache, the subsequent execution time will improve. -Furthermore, always use parameters instead of literal values to benefit from the cache. -==== - -Read more about link:{neo4j-docs-base-uri}/cypher-manual/current/execution-plans/[execution plans] and see this detailed guide for the steps on link:https://support.neo4j.com/s/article/4404022359443-Performance-tuning-with-Neo4j-AuraDB instead[how to capture the execution plans] - -To best interpret the output of your execution plan, it is recommended that you get familiar with the terms used on it. -See link:{neo4j-docs-base-uri}/cypher-manual/current/execution-plans/operator-summary/[this summary of execution plan operators] for more information. - -== Index specification - -As your data volume grows, it is important to define constraints and indexes in order to achieve the best performance for your queries. -For that, the runtime engine will need to evaluate the cost associated with a query and, to get the best estimations, it will rely on already existing indexes. -This will likely show whether an index is missing from the execution plan and which one is it. -Though in some circunstances it might look like an index is not available or possible, it may also make sense to reconsider the model and create an intermediate node or another relationship type just to leverage it. - -Read more about link:{neo4j-docs-base-uri}/cypher-manual/current/query-tuning/indexes/[the use of indexes] for a more comprehensive explanation. - -[NOTE] -==== -You can also fine-tune the usage of an index in your query by leveraging it with the link:{neo4j-docs-base-uri}/cypher-manual/current/query-tuning/using/[`USING`] clause. -==== - -== Review metrics and instance size - -With Aura, you can keep an eye on some key metrics to see which resource constraints your instance may be experiencing. -Follow the steps described in link:{neo4j-docs-base-uri}/aura/auradb/managing-databases/monitoring/[Monitoring] to check that information. - -At this stage, if the key metrics are too high, you may want to reconsider the instance sizing. -A resize operation does not cause any downtime, and you would only pay for what you use. - -[TIP] -==== -You should always size your instance against your workload activity peaks. -==== - -== Consider concurrency - -Sometimes individual queries may be optimized on their own and run fine, but the sheer volume and concurrency of operations can overwhelm your Aura instance. - -To review what is running at any given time (this makes particular sense if you have a long-running query), you can use these statements and list what is running: - -* link:{neo4j-docs-base-uri}/cypher-manual/current/clauses/transaction-clauses/#query-listing-transactions[`SHOW TRANSACTIONS`] -* link:{neo4j-docs-base-uri}/operations-manual/current/reference/procedures/#procedure_dbms_listqueries[`CALL dbms.listQueries()`] - -== Runtime engine and Cypher version - -The execution plan should show you the runtime that is selected for the execution of your query. -Usually, the planner makes the right decision, but it may be worth checking at times if the other runtimes do not perform better. -Read more about link:{neo4j-docs-base-uri}/cypher-manual/current/query-tuning/#cypher-runtime[query tuning] on Cypher runtime. - -To invoke the use of a given runtime forcibly, prepend your Cypher statement with: - -* `CYPHER runtime=pipelined` for pipelined runtime -* `CYPHER runtime=slotted` for slotted runtime -* `CYPHER runtime=interpreted` for interpreted runtime - -If you have a Cypher pattern that is not performing without error, it could as well be running on a prior Cypher version. -You can control the version used to interpret your queries by using these link:{neo4j-docs-base-uri}/cypher-manual/current/query-tuning/#cypher-version[Cypher query options]. - -== Network and the cost of the round-trip - -With Aura, it is essential to consider the best cloud in your region as the physical distance is a direct factor in the achievable network latency. - -When some event causes any network disruption between your application and Aura, you would be affected by round-trip network latency to re-submit a query. -With Aura, this is particularly important because you will need to be using transaction functions when link:{neo4j-docs-base-uri}/aura/auradb/connecting-applications/overview/[connecting your instance to applications]. diff --git a/modules/ROOT/pages/tutorials/spark.adoc b/modules/ROOT/pages/tutorials/spark.adoc deleted file mode 100644 index 280dcf5b7..000000000 --- a/modules/ROOT/pages/tutorials/spark.adoc +++ /dev/null @@ -1,90 +0,0 @@ -= Using the Apache Spark Connector -:product: Aura - -This tutorial shows how to use the Neo4j Connector for Apache Spark to write to and read data from an Aura instance. - -== Setup - -. Download link:https://spark.apache.org/downloads.html[Apache Spark^]. -+ -_Example: Spark 3.4.1, pre-built for Apache Hadoop 3.3 and later with Scala 2.12._ - -. Download the link:https://github.com/neo4j-contrib/neo4j-spark-connector/releases[Neo4j Connector JAR file^], making sure to match both the Spark version and the Scala version. -+ -_Example: Neo4j Connector 5.1.0, built for Spark 3.x with Scala 2.12._ - -. Decompress the Spark file and launch the Spark shell as in the following example: -+ -[source, shell] ----- -$ spark-3.4.1-bin-hadoop3/bin/spark-shell --jars neo4j-connector-apache-spark_2.12-5.1.0_for_spark_3.jar ----- - -== Running code in Spark - -[TIP] -==== -You can copy-paste Scala code in the Spark shell by activating the `paste` mode with the `:paste` command. -==== - -Create a Spark session and set the Aura connection credentials: - -[source, scala] ----- -import org.apache.spark.sql.{SaveMode, SparkSession} - -val spark = SparkSession.builder().getOrCreate() - -// Replace with the actual connection URI and credentials -val url = "neo4j+s://xxxxxxxx.databases.neo4j.io" -val username = "neo4j" -val password = "" ----- - -Then, create the `Person` class and a Spark `Dataset` with some example data: - -[source, scala] ----- -case class Person(name: String, surname: String, age: Int) - -// Create example Dataset -val ds = Seq( - Person("John", "Doe", 42), - Person("Jane", "Doe", 40) -).toDS() ----- - -Write the data to Aura: - -[source, scala] ----- -// Write to Neo4j -ds.write.format("org.neo4j.spark.DataSource") - .mode(SaveMode.Overwrite) - .option("url", url) - .option("authentication.basic.username", username) - .option("authentication.basic.password", password) - .option("labels", ":Person") - .option("node.keys", "name,surname") - .save() ----- - -You can then query and visualize the data using the Neo4j Browser. - -You can also read the data back from Aura: - -[source, scala] ----- -// Read from Neo4j -val data = spark.read.format("org.neo4j.spark.DataSource") - .option("url", url) - .option("authentication.basic.username", username) - .option("authentication.basic.password", password) - .option("labels", "Person") - .load() - -// Visualize the data as a table -data.show() ----- - -For further information on how to use the connector, read the link:{neo4j-docs-base-uri}/spark/[Neo4j Spark Connector docs]. \ No newline at end of file diff --git a/modules/ROOT/pages/tutorials/troubleshooting.adoc b/modules/ROOT/pages/tutorials/troubleshooting.adoc deleted file mode 100644 index 3a8e9ad77..000000000 --- a/modules/ROOT/pages/tutorials/troubleshooting.adoc +++ /dev/null @@ -1,170 +0,0 @@ -[[aura-troubleshooting]] -= Troubleshooting -:description: Troubleshooting information that can help you diagnose and correct problems. - -This page provides possible solutions to several common issues you may encounter when using Neo4j Aura. - -Regardless of the issue, viewing the link:/docs/aura/platform/logging/[Aura query log] is always recommended to monitor processes and verify any problems. - -== Query performance - -=== `MemoryLimitExceededException` - -During regular operations of your Aura instance, you may at times see that some of your queries fail with the error: - -.MemoryLimitExceededException error -[source, shell, role=nocopy wrap] ----- -org.neo4j.memory.MemoryLimitExceededException: The allocation of an extra 8.3 MiB would use more than the limit 278.0 MiB. -Currently using 275.1 MiB. dbms.memory.transaction.global_max_size threshold reached ----- - -The `org.neo4j.memory.MemoryLimitExceededException` configuration acts as a safeguard, limiting the quantity of memory allocated to all transactions while preserving the regular operations of the Aura instance. -Similarly, the property `dbms.memory.transaction.global_max_size` also aims to protect the Aura Instance from experiencing any OOMs (OutOfMemory exceptions) and increase resiliency. -It is enabled in Aura and cannot be disabled. - -However, the measured heap usage of all transactions is only an estimate and may differ from the actual number. -The estimation algorithm relies on a conservative approach, which can lead to overestimations of memory usage. -In such cases, all contributing objects' identities are unknown and cannot be assumed to be shared. - -Solution:: - -[NOTE] -==== -We recommend handling this error in your application code, as it may be intermittent. -==== - -Overestimations are most likely to happen when using `UNWIND` on long lists or when expanding a variable length or shortest path pattern. -The many relationships shared between the computed result paths could be the cause of a lack of precision in the estimation algorithm. - -To avoid this scenario, try running the same query without using a sorting operation like `ORDER BY` or `DISTINCT`. -Additionally, if possible, handle this ordering or uniqueness in your application. - -If removing the `ORDER BY` or `DISTINCT` clauses does not solve the issue, the primary mitigation for this error is to perform one or more of these actions: - -* Handle this exception in your code and be prepared to retry if this is an intermittent error. -Keep in mind that the query can succeed regardless. -+ -* Rework the relevant query to optimize it. -** Use `EXPLAIN` or `PROFILE` to review the plans (see more about link:https://neo4j.com/docs/cypher-manual/current/query-tuning/[query tuning]). -** Use `PROFILE` in cypher-shell to check the overall memory footprint of a query. -The output will include memory consumption information, the query's result, if any, and the execution plan. -In the following example, the memory consumed is 11,080 Bytes: -+ -image::planSummary.png[] - -* Increase the instance size of your Aura deployment to get more resources. -* Reduce the concurrency of queries heavy on resources to get a better chance of success. - -[NOTE] -==== -If this error occurs while loading data from CSV files, use `apoc.periodic.iterate` to import the data and use a relatively small number for the `batch_size` parameter. -For more information, visit the link:https://support.neo4j.com/s/article/1500012376402-Using-apoc-to-conditional-loading-large-scale-data-set-from-JSON-or-CSV-files[Customer Support Portal]. -==== - -See link:https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/#memory-configuration-considerations[Considerations on memory configuration] for further reading on memory management. - -== Neo4j Admin database upload errors - -The `database upload` command was introduced in Neo4j Admin version 5, replacing the `push-to-cloud` command that was present in Neo4j Admin version 4.4 and earlier. The following solutions are relevant to both commands. - -=== `LegacyIndexes` - -When attempting to use `database upload` where there are native `LegacyIndexes` present, the request might fail with the following error: - -.LegacyIndexes error -[source, shell, role=nocopy wrap] ----- -ERROR: Source dumpfile has legacy indexes enabled, which we do not support. -User needs to manually follow instructions in neo4j logs to upgrade indexes. ----- - -Solution:: - -To resolve the issue, follow these steps: - -. Make sure you are at least on Neo4j version 4.4 or later. See more information about link:https://neo4j.com/docs/upgrade-migration-guide/current/[upgrade and migration]. -. In your local graph, use the following commands to get a list of the indexes and their types. -This will also provide the sequential list of commands to drop and then recreate the indexes: -+ -.Return a list of indexes and their types -[source, cypher, role=noplay] ----- -CALL db.constraints() YIELD description -UNWIND ["DROP", "CREATE"] AS command -RETURN command + " " + description ----- -+ -. In Neo4j Browser, select the "Enable multi statement query editor" option under the browser settings. -. Take the list of commands from the 2nd step and copy them in one list of multiple queries into Browser and run those queries. -. After the indexes are recreated, attempt the `database upload` command again. - -=== `InconsistentData` - -This error message will likely trigger when Neo4j Aura cannot safely load the data provided due to inconsistencies. - -Solution:: - -If you encounter this error, please raise a ticket with our link:https://support.neo4j.com[Customer Support] team. - -=== `UnsupportedStoreFormat` - -You may get this error if the store you are uploading is in a Neo4j version that is not directly supported in Neo4j Aura. - -Solution:: - -. link:https://neo4j.com/docs/upgrade-migration-guide/current/[Upgrade your database]. Make sure you are on Neo4j 4.4 or later. -. If you encounter problems upgrading, please raise a ticket with our link:https://support.neo4j.com[Customer Support] team. - -=== `LogicalRestrictions` - -You may get this error when the store you are uploading exceeds the logical limits of your database. - -Solution:: - -. Delete nodes and relationships to ensure the data is within the specified limits for your instance, and try the upload again. -. If you are confident you have not exceeded these limits, please raise a ticket with our link:https://support.neo4j.com[Customer Support] team. - -=== `Fallback` - -This error can be triggered when the uploaded file is not recognized as a valid Neo4j dump file. - -Solution:: - -. Check the file and try again. -. If you are confident the file being uploaded is correct, please raise a ticket with our link:https://support.neo4j.com[Customer Support] team. - -== Driver integration - -=== JavaScript routing table error - -JavaScript driver version 4.4.5 and greater assumes the existence of database connectivity. -When the connection fails, the two most common error messages are "Session Expired" or a routing table error: - -.Routing table error -[source, shell, role=nocopy wrap] ----- -Neo4jError: Could not perform discovery. -No routing servers available. -Known routing table: RoutingTable[database=default database, expirationTime=0, currentTime=1644933316983, routers=[], readers=[], writers=[]] ----- - -This error can also be encountered when no default database is defined. - -Solution:: - -Verify connectivity before creating a session object, and specify the default database in your driver definition. - -.Verifying connectivity -[source, javascript] ----- -const session = driver.session({ database: "neo4j" }) -driver.verifyConnectivity() - -let session = driver.session(....) ----- - -[NOTE] -==== -Rapid session creation can exceed the database's maximum concurrent connection limit, resulting in the “Session Expired” error when creating more sessions. -==== diff --git a/modules/ROOT/pages/tutorials/upgrade.adoc b/modules/ROOT/pages/tutorials/upgrade.adoc deleted file mode 100644 index 3af0bf702..000000000 --- a/modules/ROOT/pages/tutorials/upgrade.adoc +++ /dev/null @@ -1,173 +0,0 @@ -= Upgrade to Neo4j 5 within Aura -:description: This tutorial describes how to upgrade an Aura instance running Neo4j version 4 to Neo4j version 5. - -This tutorial describes how to upgrade an Aura instance running Neo4j version 4 to Neo4j version 5. - -[CAUTION] -==== -New AuraDS and AuraDB Free instances use Neo4j 5 as standard, while all others give the option to choose between Neo4j 4 and 5 during creation. -==== - -== Prepare for the upgrade - -=== Drivers - -Neo4j's official drivers have some significant and breaking changes between versions you need to be aware of. -For a smooth migration: - -. Check the breaking changes for each driver you use, for example in the link:https://neo4j.com/docs/api/python-driver/5.0/breaking_changes.html#breaking-changes[Python driver] and in the link:https://github.com/neo4j/graph-data-science-client/blob/main/changelog.md[GDS client]. -. Make sure you switch to the latest version of the driver in line with the version of the Neo4j database. -This can be done before upgrading the version of Neo4j that you are using with Aura, as 5.x drivers are backward compatible. - -The link:https://neo4j.com/docs/upgrade-migration-guide/current/version-5/migration/breaking-changes/[Update and migration guide] contains all information and lists all the breaking changes. - -=== Indexes - -In Neo4j 5, BTREE indexes are replaced by RANGE, POINT, and TEXT indexes. -Before migrating a database, in Neo4j 4, you should create a matching RANGE, POINT, or TEXT index for each BTREE index (or index-backed constraint). -You can run `SHOW INDEXES` on your Neo4j 4 database to display its indexes. - -In most cases, RANGE indexes can replace BTREE. -However, there might be occasions when a different index type is more suitable, such as: - -* Use POINT indexes if the property value type is `point` and `distance` or `bounding box` queries are used for the property. -* Use TEXT indexes if the property value type is `text` and the values can be larger than 8Kb. -* Use TEXT indexes if the property value type is `text` and `CONTAINS` and `ENDS WITH` are used in queries for the property. - -After creating the new index, the old index should be dropped. -The following example shows how to create a new RANGE index and drop an existing `index_name` index: - -[source, Cypher, role="noplay"] ----- -CREATE RANGE INDEX range_index_name FOR (n:Label) ON (n.prop1); -DROP INDEX index_name; ----- - -The following example instead shows how to create a constraint backed by a RANGE index: - -[source, Cypher, role="noplay"] ----- -CREATE CONSTRAINT constraint_with_provider FOR (n:Label) REQUIRE (n.prop1) IS UNIQUE OPTIONS {indexProvider: 'range-1.0'} ----- - -For more information about creating indexes, see link:https://neo4j.com/docs/cypher-manual/current/indexes-for-search-performance/#administration-indexes-examples[Cypher Manual -> Creating indexes]. - -=== Cypher updates - -Neo4j 5 introduces some changes to the Cypher syntax and error handling. - -==== Cypher syntax - -All changes in the Cypher language syntax are detailed in link:https://neo4j.com/docs/cypher-manual/5/deprecations-additions-removals-compatibility[Cypher Manual -> Removals, deprecations, additions and extensions]. -Thoroughly review this section in the version you are moving to and make the necessary changes in your code. - -Here is a short list of the main changes introduced in Neo4j 5: - -[cols="1a,1a", options="header"] -|=== -|*Deprecated feature* -|*Details* - -|[source, Cypher, role="noplay"] ----- -MATCH (n)-[r:REL]->(m) SET n=r ----- -|Use the `properties()` function instead to get the map of properties of nodes/relationships that can then be used in a `SET` clause: - -[source, Cypher, role="noplay"] ----- -MATCH (n)-[r:REL]->(m) SET n=properties(r) ----- - -|[source, Cypher, role="noplay"] ----- -MATCH (a), (b), allShortestPaths((a)-[r]->(b)) RETURN b - -MATCH (a), (b), shortestPath((a)-[r]->(b)) RETURN b ----- -|`shortestPath` and `allShortestPaths` without link:https://neo4j.com/docs/cypher-manual/5/syntax/patterns/#cypher-pattern-varlength[variable-length relationship] are deprecated. Instead, use a `MATCH` with a `LIMIT` of 1 or: -[source, Cypher, role="noplay"] ----- -MATCH (a), (b), shortestPath((a)-[r*1..1]->(b)) RETURN b ----- - -|[source, Cypher, role="noplay"] ----- -CREATE DATABASE databaseName.withDot ... ----- -|Creating a database with unescaped dots in the name has been deprecated, instead escape the database name: -[source, Cypher, role="noplay"] ----- -CREATE DATABASE `databaseName.withDot` ... ----- -|=== - -==== Error/Warning/Info handling in Cypher - -Many semantic errors that Cypher finds are reported as `Neo.ClientError.Statement.SyntaxError` even though they are semantic and not syntax errors. -In Neo4j 5, the metadata returned by Cypher queries is improved. - -* The severity of some of the Warning codes is moved to Info: - -** `SubqueryVariableShadowingWarning` -> `SubqueryVariableShadowing` -** `NoApplicableIndexWarning` -> `NoApplicableIndex` -** `CartesianProductWarning` -> `CartesianProduct` -** `DynamicPropertyWarning` -> `DynamicProperty` -** `EagerOperatorWarning` -> `EagerOperator` -** `ExhustiveShortestPathWarning` -> `ExhaustiveShortestPath` -** `UnboundedVariableLengthPatternWarning` -> `UnboundedVariableLengthPattern` -** `ExperimentalFeature` -> `RuntimeExperimental` - -=== APOC - -All APOC procedures and functions available in Aura are listed in the link:https://neo4j.com/docs/aura/platform/apoc/[APOC Core library]. -See the link:https://neo4j.com/docs/apoc/5/[APOC documentation] for further details. - -=== Procedures - -Some procedures have been replaced by commands: - -[cols="1,2", options="header"] -|=== -| Procedure | Replacement -| `db.indexes` | `SHOW INDEXES` command -| `db.indexDetails` | `SHOW INDEXES YIELD *` command -| `db.schemaStatements` | `SHOW INDEXES YIELD *` command and `SHOW CONSTRAINTS YIELD *` command -| `db.constraints` | `SHOW CONSTRAINTS` command -| `db.createIndex` | `CREATE INDEX` command -| `db.createUniquePropertyConstraint` | `CREATE CONSTRAINT ... IS UNIQUE` command -| `db.index.fulltext.createNodeIndex` | `CREATE FULLTEXT INDEX` command -| `db.index.fulltext.createRelationshipIndex` | `CREATE FULLTEXT INDEX` command -| `db.index.fulltext.drop` | `DROP INDEX` command -| `dbms.procedures` | `SHOW PROCEDURES` command -| `dbms.functions` | `SHOW FUNCTIONS` command -| `dbms.listTransactions` | `SHOW TRANSACTIONS` command -| `dbms.killTransaction` | `TERMINATE TRANSACTIONS` command -| `dbms.killTransactions` | `TERMINATE TRANSACTIONS` command -| `dbms.listQueries` | `SHOW TRANSACTIONS` command -| `dbms.killQuery` | `TERMINATE TRANSACTIONS` command -| `dbms.killQueries` | `TERMINATE TRANSACTIONS` command -| `dbms.scheduler.profile` | - -|=== - -Refer to the link:https://neo4j.com/docs/upgrade-migration-guide/current/version-5/migration/breaking-changes/#_removals[Update and migration guide] for a full list of removals and deprecations. - -=== Neo4j Connectors - -If you are using a Neo4j Connector for link:https://github.com/neo4j-contrib/neo4j-spark-connector/releases/[Apache Spark] or link:https://github.com/neo4j-contrib/neo4j-streams/releases[Apache Kafka], make sure its version is compatible with Neo4j 5. - -The Neo4j BI Connectors available on the link:https://neo4j.com/download-center/#integrations[Download center] are compatible with Neo4j 5. - -== Perform the upgrade - -Once you have prepared your Neo4j 4 Aura instance, you are ready to migrate the instance to a new or existing Neo4j 5 instance. - -=== Clone - -If you have an existing Neo4j 5 instance, you can use the *Clone To Existing* instance action on your Neo4j 4 xref:auradb/managing-databases/database-actions.adoc#_clone_to_an_existing_auradb_instance[AuraDB] or xref:aurads/managing-instances/instance-actions#_clone_to_an_existing_aurads_instance[AuraDS] instance. - -If you do not have an existing Neo4j 5 instance, you can use the *Clone To New* instance action on your Neo4j 4 xref:auradb/managing-databases/database-actions.adoc#_clone_to_a_new_auradb_instance[AuraDB] or xref:aurads/managing-instances/instance-actions#_clone_to_a_new_aurads_instance[AuraDS] instance. - -=== Export and Import - -Alternatively, you can *Export* a snapshot dump file from your Neo4j 4 xref:auradb/managing-databases/backup-restore-export#_backup_and_export[AuraDB] or xref:aurads/managing-instances/backup-restore-export#_backup_and_export[AuraDS] instance, create a new Neo4j 5 instance manually, and then import the dump file into your new Neo4j 5 xref:auradb/importing/import-database#_import_database[AuraDB] or xref:aurads/importing-data/import-db#_import_database[AuraDS] instance. \ No newline at end of file diff --git a/modules/ROOT/pages/user-management.adoc b/modules/ROOT/pages/user-management.adoc new file mode 100644 index 000000000..0af1a744c --- /dev/null +++ b/modules/ROOT/pages/user-management.adoc @@ -0,0 +1,110 @@ +[[aura-user-management]] += User management +:description: This page describes how to manage users in Neo4j Aura. + +User management is a feature within Aura that allows you to invite users and set their roles within an isolated environment. + +image::inviteusers.png[] + +== Projects + +Grant users access to a project. + +The project you're currently viewing is displayed in the header of the console. +You can select the project name to open the project dropdown menu, allowing you to view all the projects that you have access to and switch between them. + +Additionally, you can perform the following actions from the *Project Settings* page. +You can access the **Settings** page by selecting **Settings** from the sidebar menu of the console. + +* Edit the name of the project you are currently viewing by selecting the pencil icon next to the project name. This action requires you to be an Admin of the project. + +* Copy the Project ID by selecting the clipboard icon that appears next to the Project ID. + +== Users + +Each project can have multiple users with individual accounts allowing access to the same environment. + +The users with access to a project can be viewed and managed from the **Users** page. +You can access the **Users** page by selecting **Users** from the sidebar menu of the console. + +=== Roles + +Users within a project can be assigned one of the following roles: + +* _Project Admin_ +* _Project Member_ +* _Project Viewer_ +* _Project Metrics Integration Reader_ + +:check-mark: icon:check[] + +.Roles +[opts="header",cols="3,1,1,1"] +|=== +| Capability | Admin | Member | Viewer +| View users and their roles | {check-mark} | {check-mark} | {check-mark} +| View and open instances | {check-mark} | {check-mark} | {check-mark} +| Access the Neo4j Customer Support Portal | {check-mark} | {check-mark} | {check-mark} +| Perform all actions on instances footnote:[Actions include creating, deleting, pausing, resuming, and editing instances.] | {check-mark} | {check-mark} | +| Clone data to new and existing instances | {check-mark} | {check-mark} | +| Take on-demand snapshots | {check-mark} | {check-mark} | +| Restore from snapshots | {check-mark} | {check-mark} | +| Edit the project name | {check-mark} | | +| Invite new users to the project | {check-mark} | | +| Edit existing users' roles | {check-mark} | | +| Delete existing users from the project | {check-mark} | | +| View and edit billing information | {check-mark} | | +|=== + +[NOTE] +==== +Each project must have at least one Project Admin, but it is also possible for projects to have multiple Project Admins. +==== + +=== Inviting users + +As an _Admin_, to invite a new user: + +. Select **Invite user** from the **User** page. +. Enter the **Email** address of the person you want to invite. +. Select the user's **Role**. +. Select **Invite**. + +The new user will appear within the list of users on the **User** page with the _Pending invite_ **Status** until they accept the invite. + +An email will be sent to the user with a link to accept the invite. + +=== Editing users + +As an _Admin_, to edit an existing user's role: + +. Select the more actions (three dots) icon next to the user's name from the **User** page. +. Select the user's new **Role**. +. Select **Save**. + +=== Deleting users + +As an _Admin_, to delete an existing user: + +. Select the more actions (three dots) next to the user's name from the **User** page. +. Select **Delete**. + +// [NOTE] +// ==== +// It is also possible to delete a user whose **Status** is _Pending invite_. + +// Select the trash can icon next to the user's name, and then select **Revoke**. +// ==== + +=== Accepting an invite + +When invited to a project, you will receive an email with a link to accept the invite. +This link will direct you to the Aura console, where a **Project invitation** modal will appear. +You can select the project(s) you have been invited to and choose to accept or decline the invite(s). + +// You can also close the **Project invitation** modal without accepting or declining the invite(s) and later manually re-open the modal by selecting the **Pending invites** envelope icon in the console header. + +[TIP] +==== +User management within the Aura console does not replace built-in roles or fine-grained RBAC at the database level. +==== diff --git a/modules/ROOT/pages/visual-tour/data-services.adoc b/modules/ROOT/pages/visual-tour/data-services.adoc new file mode 100644 index 000000000..a752c3e3b --- /dev/null +++ b/modules/ROOT/pages/visual-tour/data-services.adoc @@ -0,0 +1,11 @@ +[[visual-overview-data-services]] += Data services +:description: This page introduces the console UI. + +An image of the card view and maybe expand it also and point out the elements and what you can do. + +Another image of data importer and brief intro, also link to more extensive content. + +image::dataservices.png[] + +In Neo4j Aura, which is Neo4j's fully managed cloud service, Data Services encompass features that streamline the management and utilization of graph databases. Instances in Neo4j Aura represent individual graph database environments that can be provisioned, scaled, and managed through the Aura platform. Each instance provides a dedicated space for running graph queries, managing data, and performing analytics. Import services in Neo4j Aura facilitate the onboarding of data into the graph database. This includes tools and functionalities for importing data from various sources, such as CSV files, and for integrating data from external systems. These services ensure that users can efficiently set up their graph databases and populate them with data, enabling powerful insights and analytics right out of the box. \ No newline at end of file diff --git a/modules/ROOT/pages/visual-tour/index.adoc b/modules/ROOT/pages/visual-tour/index.adoc new file mode 100644 index 000000000..df8645e6e --- /dev/null +++ b/modules/ROOT/pages/visual-tour/index.adoc @@ -0,0 +1,123 @@ +[[visual-overview]] += Visual tour of the Console +:description: This section introduces the console UI. + +== Console structure + +The hierarchy of the console consists of organizations, projects, and instances: + +* *Organization:* The highest level, representing the overall team or company. +* *Projects:* Folders that organize your instances. +* *Instances:* Contain the databases. + + +When you first log in to the console, you are part of an organization. +An organization can contain one or more projects. +Click a project to open it. + +image::project.png[] + +Project cards provide a snapshot of each project, including the number of instances and members associated with it. +Opening a project card takes you inside that project, where you can view existing instances and create new ones as needed. + +The organization or project you're currently viewing is always displayed in the header of the console. + +To switch between different organisations or projects, click on its name. +This opens a dropdown menu where you can see all the organisations and projects you have access to and select the one you want to switch to. + +image::breadcrumbs.png[] + +== Data Services + +This section contains your instances and the Import service. +To access your data, navigate to a project and xref:getting-started/connect-database.adoc[connect to an instance]. + +=== Instances + +An instance in Aura is an environment of the Neo4j database, managed and run in the cloud. +A project can contain one or more instances. +In the instance section, you can view and select which instance you want to connect to. + +By expanding an instance card, you can explore various options, such as viewing metrics, taking snapshots, or pausing the instance. +Additionally, you can also connect the instance to an application. + +=== Import + +If your instance doesn't contain any data, the Import service allows you to import CSV files to your database. +This service lets you create your data model and map it to your files. +See the xref:import/introduction.adoc[What is Import?] for more information about this service. + +== Tools + +The tools allow you to interact with your data and therefore require an active connection to an instance. +Once connected to an instance, you can use both the Explore and the Query tools. + +image::leftsidepanel.png[] + +=== Explore + +Explore helps you visualize and interact with datasets without using any code. + +* *Visual Exploration:* See your data as a graph, with nodes and relationships between them, making it easier to understand and analyze complex data connections. + +* *Data Insights:* By interacting with the graph, uncover patterns, trends, and insights that aren't easily visible in traditional tabular formats. +Explore is designed to make working with graph data more intuitive and insightful by providing a visual and interactive way to analyze and manage your data. + +See xref:explore/introduction.adoc[What is Explore?] for more information. + +=== Query + +Query is a helpful tool to interact with your data using Cypher, the graph query language. + +* *Cypher Editor:* Where you write Cypher queries and get instant feedback on syntax errors and other helpful advice. +* *Result frames:* Where query results are displayed as a graph, table, or RAW. +* *Query History:* A feature that shows previously run queries. + +See xref:query/introduction.adoc[What is Query?] for more information. + + +== Operations + +=== Metrics + +Metrics help you monitor and analyze your database's performance and usage. +Some metrics are available directly on the instance card, and you can find the full range in **Metrics**. + +See xref:all-metrics.adoc[Metrics] for more information. + +// === Logs + +// Track and review system activities and events. +// Logs provide insights into database operations, errors, and other critical events, helping you monitor performance and troubleshoot issues. + +== Project + +A project is an organizational grouping for one or more instances. +Access, permissions, and billing are managed at the project level. + + +=== Users + +Users are associated with a project and can have various roles and permissions. +New users can be invited from the users' page. +From there, you can manage accounts, permissions, and control access levels to ensure secure and appropriate instance use. +Individuals can have access to a project for administrative work, or to the instances for data work — you can also assign more specific permissions. +See xref:user-management.adoc[User management] for more information. + +// === Roles + +// image::roles1.png[] +// image::roles2.png[] + +// Roles define the permissions and responsibilities of users within your console. +// Roles manage what actions users can perform and what data they can access, ensuring proper control and organization. + +=== Settings + +The project settings allow you to change your project name. +If you need to reference or share your project, you can copy your project ID. + +image::projectsettings.png[] + +// Configure options to customize and optimize your console. +// This includes adjusting performance settings, configuring alerts, and managing system preferences to suit your needs. \ No newline at end of file diff --git a/modules/ROOT/pages/visual-tour/operations.adoc b/modules/ROOT/pages/visual-tour/operations.adoc new file mode 100644 index 000000000..ae127c5c8 --- /dev/null +++ b/modules/ROOT/pages/visual-tour/operations.adoc @@ -0,0 +1,9 @@ +[[visual-overview-operations]] += Operations +:description: This page introduces the console UI. + +Image of expanded metrics and link to content + +Another image of Logs and link to content + +image::expandedresources.png[] \ No newline at end of file diff --git a/modules/ROOT/pages/visual-tour/organization.adoc b/modules/ROOT/pages/visual-tour/organization.adoc new file mode 100644 index 000000000..a1b924604 --- /dev/null +++ b/modules/ROOT/pages/visual-tour/organization.adoc @@ -0,0 +1,16 @@ +[[visual-overview-organization]] += Organization +:description: This page introduces the console UI. + +When setting up the Aura Console, you'll start by landing in an organization. Organizations are the top level of the console hierarchy and provide an overview of projects, users, billing, and security features. + +If you've set up your Aura account from scratch, you'll automatically be assigned an organization as an admin. You can then create and manage multiple projects within this organization. + +The new Aura console will initially name your organization with a default label, such as “Alex’s organization,” but you have the flexibility to change this name if you prefer. + +image::organization.png[] + + +*An image of the organization view here would be nice. +Also images of Projects, Users, and Settings. +Brief intros to those.* \ No newline at end of file diff --git a/modules/ROOT/pages/visual-tour/project.adoc b/modules/ROOT/pages/visual-tour/project.adoc new file mode 100644 index 000000000..ebe9653cf --- /dev/null +++ b/modules/ROOT/pages/visual-tour/project.adoc @@ -0,0 +1,13 @@ +[[visual-overview-project]] += Project +:description: This page introduces projects. + + +If you're an existing Aura user, consider that tenants are now referred to as projects. + +An organization can have multiple projects, and each project can include one or more instances. You will see a list of instances, where you can perform actions such as pausing or cloning. For more details on these actions, visit https://neo4j.com/docs/aura/auradb/managing-databases/database-actions/. + +* Images of the various exoanded things: Users, Roles, Billing, and Settings. +Links to where we talk about these things in greater detail. + +image::project.png[] diff --git a/modules/ROOT/pages/visual-tour/tools.adoc b/modules/ROOT/pages/visual-tour/tools.adoc new file mode 100644 index 000000000..8a82390b2 --- /dev/null +++ b/modules/ROOT/pages/visual-tour/tools.adoc @@ -0,0 +1,16 @@ +[[visual-overview-tools]] += Tools +:description: This page introduces the console UI. + +Image of Explore, link also to the rest of Explore content + +Another image of Query, link also to the rest of Query content + +== Explore + +image::tools.png[] +image::emptyexplore.png[] + +== Query + +image::emptyquery.png[] diff --git a/preview.yml b/preview.yml index 476b4918a..7f0c44c90 100644 --- a/preview.yml +++ b/preview.yml @@ -60,4 +60,5 @@ asciidoc: properties: '\{properties}' json: '\{json}' maps: '\{maps}' + neo4j-base-uri: https://neo4j.com neo4j-docs-base-uri: https://neo4j.com/docs diff --git a/publish.yml b/publish.yml new file mode 100644 index 000000000..03cba6bb4 --- /dev/null +++ b/publish.yml @@ -0,0 +1,64 @@ +site: + title: Neo4j Docs + url: https://neo4j.com/docs + start_page: aura:ROOT:index.adoc + +content: + sources: + - url: ./ + branches: ['HEAD', 'main'] + edit_url: '{web_url}/tree/{refname}/{path}' + exclude: + - '!**/_includes/*' + - '!**/readme.adoc' + - '!**/README.adoc' +ui: + bundle: + url: https://static-content.neo4j.com/build/ui-bundle-latest.zip + snapshot: true + output_dir: /assets + +urls: + html_extension_style: indexify + +antora: + extensions: + - require: "@neo4j-antora/antora-modify-sitemaps" + sitemap_version: '~' + move_sitemaps_to_components: true + +asciidoc: + extensions: + - "@neo4j-documentation/remote-include" + - "@neo4j-documentation/macros" + - "@neo4j-antora/antora-table-footnotes" + # - "@neo4j-antora/antora-add-notes" + attributes: + page-theme: docs + page-type: Docs + page-search-type: Docs + page-search-site: Reference Docs + page-canonical-root: /docs + page-pagination: true + page-no-canonical: true + page-origin-private: false + page-hide-toc: false + page-mixpanel: 4bfb2414ab973c741b6f067bf06d5575 + # page-add-notes-module: review-note@ + # page-add-notes-tags: review@ + includePDF: false + nonhtmloutput: "" + # sectnums: true, removed so they are off by default + # sectnumlevel: 3, + experimental: '' + copyright: 2024 + common-license-page-uri: https://neo4j.com/docs/license/ + # apoc procedures contain content that look like attributes, but aren't + params: '\{params}' + config: '\{config}' + data: '\{data}' + properties: '\{properties}' + json: '\{json}' + maps: '\{maps}' + neo4j-base-uri: '' + neo4j-docs-base-uri: /docs \ No newline at end of file