imbajin commented on code in PR #499:
URL: https://github.com/apache/hugegraph-doc/pull/499#discussion_r4264111937


##########
content/en/docs/language/migrate-from-neo4j.md:
##########
@@ -0,0 +1,99 @@
+---
+title: "Migrating from Neo4j"
+linkTitle: "Migrating from Neo4j"
+weight: 4
+---
+
+### Who this page is for
+
+Neo4j users evaluating HugeGraph. HugeGraph's Cypher coverage is defined by
+the [`cypher-for-gremlin`](https://github.com/opencypher/cypher-for-gremlin)
+translator and is not 1:1 with Neo4j — see
+[Known limitations](/docs/language/hugegraph-cypher/#known-limitations) for 
what
+released HugeGraph versions do, and the
+[Cypher compatibility notes](/docs/language/cypher-compatibility/) for the
+development-tree verification record and
+[HugeGraph Cypher](/docs/language/hugegraph-cypher/) for usage.
+
+### What carries over directly
+
+| Neo4j concept | HugeGraph equivalent |
+|---|---|
+| Property graph model (nodes / relationships / properties) | Same — vertex 
labels / edge labels / properties |
+| Core Cypher: `MATCH`/`WHERE`/`RETURN`/`CREATE`/`SET`/`DELETE` | Works as-is 
(REST `/cypher` endpoint or Java client `CypherManager`) |
+| Simple aggregations (`count`/`sum`/`min`/`max`/`avg`) | Works as-is |
+| Traversal-heavy queries | Gremlin traversals or the [traverser REST 
APIs](/docs/clients/restful-api/traverser/) (k-out, shortest path, 
personalrank, ...) |
+
+### Habits you need to change
+
+| In Neo4j | In HugeGraph |
+|---|---|
+| `CREATE INDEX` / `CREATE CONSTRAINT` | Create indexes/constraints through 
the [IndexLabel REST API](/docs/clients/restful-api/indexlabel/); Cypher 
carries no DDL |
+| Implicit schema (add properties freely) | **Strong schema**: define 
VertexLabel / EdgeLabel / PropertyKey before writing data |
+| Parameterized queries `$param` | Released versions send the raw statement 
only — a missing binding is inlined as `null` instead of failing (a predicate 
on it matches no rows), so validate values client-side; JSON-bound parameters 
are available on `master` after [ASF PR 
#3289](https://github.com/apache/hugegraph/pull/3289), with a fixed limit of 16 
top-level bindings |
+| `CALL dbms.*` / `CALL algo.*` procedures | Equivalent capabilities live in 
the [traverser](/docs/clients/restful-api/traverser/), 
[task](/docs/clients/restful-api/task/), and other REST APIs |
+| Driver: Neo4j Bolt driver | 
[hugegraph-client](/docs/clients/hugegraph-client/) (`CypherManager`) or any 
HTTP client |
+| Transaction boundaries inside a Cypher statement | One statement per 
request; graph-to-graph data migration uses [Apache SeaTunnel 
3.0.0](https://seatunnel.apache.org/download/) (preferred — see below), 
file-based bulk loads use the [HugeGraph 
Loader](/docs/quickstart/toolchain/hugegraph-loader/) |
+
+The latest published release is 1.7.0 as of 2026-10-09; the merged JSON-bound 
request form is a
+`master` feature, not a promise about that release. See the compatibility 
notes for its validated contract.
+
+### Suggested migration path
+
+1. **Inventory your queries**: classify the Cypher in your application against
+   the [Known limitations](/docs/language/hugegraph-cypher/#known-limitations)
+   (which describe released behaviour) into
+   "works as-is / rewrite as Gremlin / switch to a REST API"; the
+   [compatibility notes](/docs/language/cypher-compatibility/) record only the
+   development-tree contract.
+2. **Create the schema first**: define VertexLabel / EdgeLabel / PropertyKey
+   and indexes through the schema API — HugeGraph requires the schema to
+   exist before data is written.
+3. **Import data**: the preferred path is
+   [Apache SeaTunnel 3.0.0](https://seatunnel.apache.org/download/) (released
+   2026-09-29) running **Neo4j Source → HugeGraph Sink** directly — no
+   intermediate file export. REST remains fine for small datasets; the
+   [HugeGraph 
Loader](https://github.com/apache/hugegraph-toolchain/tree/master/hugegraph-loader)
+   stays an alternative for file-based imports. HugeGraph-side setup
+   (environment, `mappings`, vertex/edge import examples) is covered in the
+   [Import Graph Data with SeaTunnel Sink 
guide](/docs/quickstart/toolchain/import/hugegraph-seatunnel-connector/).
+
+   The [SeaTunnel 3.0.0 connector 
docs](https://seatunnel.apache.org/docs/3.0.0/introduction/about/) document
+   what to rely on:
+   - [Neo4j 
Source](https://seatunnel.apache.org/docs/3.0.0/connectors/source/Neo4j/) reads 
Cypher
+     query results with explicit field schemas; 3.0.0 adds multi-table reads 
via `tables_configs`.
+   - [HugeGraph 
Sink](https://seatunnel.apache.org/docs/3.0.0/connectors/sink/HugeGraph/) is
+     refactored in 3.0.0 with multi-mapping support — use the recommended 
`mappings` configuration
+     for vertices/edges and follow its schema-creation behavior.
+   - [HugeGraph 
Source](https://seatunnel.apache.org/docs/3.0.0/connectors/source/HugeGraph/) is
+     new in 3.0.0 (schema auto-discovery, multi-label/parallel reads), 
enabling HugeGraph export
+     and migration workflows.
+
+   Map Neo4j properties to HugeGraph PropertyKeys and pick the vertex ID 
strategy
+   before importing: use `idStrategy = "PRIMARY_KEY"` with a Neo4j business 
key in
+   `idFields` and express edge endpoints through those same key fields, or
+   `idStrategy = "CUSTOMIZE_STRING"` to keep the Neo4j node id. Labels you
+   pre-created in step 2 must use that same strategy — automatic creation does 
not
+   convert an existing `PRIMARY_KEY` label into `CUSTOMIZE_STRING` — and step 
2 is
+   optional when the Sink `mappings` configuration creates the schema. Load 
vertices

Review Comment:
   ⚠️ Important: Blocking: no. Summary: `mappings` schema creation does not 
include the IndexLabels that step 2 tells users to create. Evidence: SeaTunnel 
3.0.0 documents automatic creation of missing `PropertyKey`, `VertexLabel`, and 
`EdgeLabel` definitions; its mappings options do not create IndexLabels. 
Requested change: clarify that `mappings` can replace pre-creating those three 
schema types, while required query indexes still need separate IndexLabel 
creation; do not mark all of step 2 optional. Mirror the distinction in Chinese.



##########
content/en/docs/language/hugegraph-cypher.md:
##########
@@ -0,0 +1,164 @@
+---
+title: "HugeGraph Cypher"
+linkTitle: "Cypher Query Language"
+weight: 2
+---
+
+### Overview
+
+HugeGraph supports [Cypher](https://opencypher.org/), the declarative graph 
query language originally created by Neo4j and standardized as 
[openCypher](https://github.com/opencypher/openCypher). While Gremlin is an 
imperative traversal language, Cypher lets you describe the graph pattern you 
want (`MATCH`, `WHERE`, `RETURN`) and lets the engine decide how to execute it.
+
+HugeGraph executes Cypher by translating the statement to Gremlin through the 
[cypher-for-gremlin](https://github.com/opencypher/cypher-for-gremlin) 
transpiler, then running the resulting traversal on the TinkerPop stack. This 
means Cypher support in HugeGraph covers the openCypher 9 surface that the 
transpiler implements — see [Known limitations](#known-limitations) below.
+
+### When to use Cypher vs Gremlin
+
+| Use Cypher when | Use Gremlin when |
+|---|---|
+| You are migrating from Neo4j or already know Cypher | You need the full 
HugeGraph feature surface |
+| You want declarative pattern matching (`MATCH (a)-[:KNOWS]->(b)`) | You need 
fine-grained traversal control, custom steps, or lambdas |
+| Your queries are read-mostly patterns and projections | You need graph 
algorithms, OLAP, or features Cypher does not expose |
+
+For anything Cypher cannot express, the equivalent Gremlin query always works 
— examples below show both.
+
+### Calling the Cypher API
+
+Cypher statements are submitted to the HugeGraph Server through the REST 
endpoint:
+
+```http
+GET  /graphspaces/{graphspace}/graphs/{graph}/cypher?cypher={statement}
+POST /graphspaces/{graphspace}/graphs/{graph}/cypher
+```
+
+The endpoint always requires an `Authorization` header (`Basic` or `Bearer`), 
even when server authentication is disabled — the credentials are forwarded to 
the Gremlin Server. `Basic` credentials must be encoded with URL-safe Base64 
(`-` and `_` instead of `+` and `/`), and the password must not contain `:`; 
use `Bearer` for accounts that cannot meet either condition. See the [Cypher 
REST API reference](/docs/clients/restful-api/cypher/) for the full 
request/response format.
+
+Example:
+
+```bash
+curl -H "Authorization: Bearer $TOKEN" \
+  
"http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/cypher?cypher=MATCH%20(n:person)%20RETURN%20n.name%20LIMIT%2010"
+```
+
+From the Java client, use `CypherManager` (see 
[hugegraph-client](/docs/clients/hugegraph-client/)):
+
+```java
+ResultSet resultSet = hugeClient.cypher().execute("MATCH (n:person) RETURN 
n.name LIMIT 10");
+```
+
+### Basic examples
+
+The examples below assume a graph with `person` vertices (`name`, `age`, 
`city` properties) and `knows` edges.
+They assume the labels declare `nullableKeys("age", "city")` on `person` and 
nullable properties on `knows` —
+for example the schema in `scripts/example.groovy` modified with those 
nullable keys. On a schema without them
+(the released default marks `age` and `city` non-null on `person`), the create 
and update examples below fail
+the non-null property check: set every non-null property in each statement, or 
declare the labels with
+`nullableKeys` first. If the `person` label uses the `PRIMARY_KEY` id strategy 
(as it does in `scripts/example.groovy`), the two-vertex
+shorthand `CREATE (a)-[:knows]->(b)` is rejected with an execution error 
reporting that the primary keys must be set
+(verified on `master` with 
[#3289](https://github.com/apache/hugegraph/pull/3289) merged), so the edge 
example below creates the vertices
+first and then matches them. The shorthand works with the `AUTOMATIC` id 
strategy.
+
+#### Read — MATCH / WHERE / RETURN
+
+```cypher
+// All persons named "marko"
+MATCH (n:person) WHERE n.name = 'marko' RETURN n
+```
+
+```cypher
+// Projection with ordering and limit
+MATCH (n:person)
+WHERE n.age > 30
+RETURN n.name AS name, n.age AS age
+ORDER BY age DESC
+LIMIT 10
+```
+
+```cypher
+// Relationship pattern
+MATCH (a:person)-[:knows]->(b:person)
+WHERE a.name = 'marko'
+RETURN b.name AS friend
+```
+
+#### Create — CREATE
+
+```cypher
+// Create a vertex
+CREATE (n:person {name: 'josh', age: 32, city: 'beijing'})
+```
+
+```cypher
+// Create two vertices, then an edge between them (send each statement as its 
own request)
+CREATE (:person {name: 'peter'})

Review Comment:
   ⚠️ Important: Blocking: yes. Summary: This `CREATE` reuses the `peter` 
primary key already seeded by the cited `scripts/example.groovy`; with the 
nullable schema described above, the insert replaces that record without its 
existing `age` and `city`. Evidence: HugeGraph 1.7.0's example script seeds 
`person(name='peter', age=35, city='Shanghai')`; `HugeVertex.assignId` derives 
the ID from the primary key, and RocksDB vertex insertion writes the serialized 
record with a keyed `put`. Requested change: use a name absent from the sample 
data throughout the create/match/update examples, or explicitly require a clean 
graph, and mirror the fix in Chinese.



##########
content/en/docs/language/migrate-from-neo4j.md:
##########
@@ -0,0 +1,99 @@
+---
+title: "Migrating from Neo4j"
+linkTitle: "Migrating from Neo4j"
+weight: 4
+---
+
+### Who this page is for
+
+Neo4j users evaluating HugeGraph. HugeGraph's Cypher coverage is defined by
+the [`cypher-for-gremlin`](https://github.com/opencypher/cypher-for-gremlin)
+translator and is not 1:1 with Neo4j — see
+[Known limitations](/docs/language/hugegraph-cypher/#known-limitations) for 
what
+released HugeGraph versions do, and the
+[Cypher compatibility notes](/docs/language/cypher-compatibility/) for the
+development-tree verification record and
+[HugeGraph Cypher](/docs/language/hugegraph-cypher/) for usage.
+
+### What carries over directly
+
+| Neo4j concept | HugeGraph equivalent |
+|---|---|
+| Property graph model (nodes / relationships / properties) | Same — vertex 
labels / edge labels / properties |
+| Core Cypher: `MATCH`/`WHERE`/`RETURN`/`CREATE`/`SET`/`DELETE` | Works as-is 
(REST `/cypher` endpoint or Java client `CypherManager`) |
+| Simple aggregations (`count`/`sum`/`min`/`max`/`avg`) | Works as-is |
+| Traversal-heavy queries | Gremlin traversals or the [traverser REST 
APIs](/docs/clients/restful-api/traverser/) (k-out, shortest path, 
personalrank, ...) |
+
+### Habits you need to change
+
+| In Neo4j | In HugeGraph |
+|---|---|
+| `CREATE INDEX` / `CREATE CONSTRAINT` | Create indexes/constraints through 
the [IndexLabel REST API](/docs/clients/restful-api/indexlabel/); Cypher 
carries no DDL |
+| Implicit schema (add properties freely) | **Strong schema**: define 
VertexLabel / EdgeLabel / PropertyKey before writing data |
+| Parameterized queries `$param` | Released versions send the raw statement 
only — a missing binding is inlined as `null` instead of failing (a predicate 
on it matches no rows), so validate values client-side; JSON-bound parameters 
are available on `master` after [ASF PR 
#3289](https://github.com/apache/hugegraph/pull/3289), with a fixed limit of 16 
top-level bindings |
+| `CALL dbms.*` / `CALL algo.*` procedures | Equivalent capabilities live in 
the [traverser](/docs/clients/restful-api/traverser/), 
[task](/docs/clients/restful-api/task/), and other REST APIs |
+| Driver: Neo4j Bolt driver | 
[hugegraph-client](/docs/clients/hugegraph-client/) (`CypherManager`) or any 
HTTP client |
+| Transaction boundaries inside a Cypher statement | One statement per 
request; graph-to-graph data migration uses [Apache SeaTunnel 
3.0.0](https://seatunnel.apache.org/download/) (preferred — see below), 
file-based bulk loads use the [HugeGraph 
Loader](/docs/quickstart/toolchain/hugegraph-loader/) |
+
+The latest published release is 1.7.0 as of 2026-10-09; the merged JSON-bound 
request form is a
+`master` feature, not a promise about that release. See the compatibility 
notes for its validated contract.
+
+### Suggested migration path
+
+1. **Inventory your queries**: classify the Cypher in your application against
+   the [Known limitations](/docs/language/hugegraph-cypher/#known-limitations)
+   (which describe released behaviour) into
+   "works as-is / rewrite as Gremlin / switch to a REST API"; the
+   [compatibility notes](/docs/language/cypher-compatibility/) record only the
+   development-tree contract.
+2. **Create the schema first**: define VertexLabel / EdgeLabel / PropertyKey
+   and indexes through the schema API — HugeGraph requires the schema to
+   exist before data is written.
+3. **Import data**: the preferred path is
+   [Apache SeaTunnel 3.0.0](https://seatunnel.apache.org/download/) (released
+   2026-09-29) running **Neo4j Source → HugeGraph Sink** directly — no
+   intermediate file export. REST remains fine for small datasets; the
+   [HugeGraph 
Loader](https://github.com/apache/hugegraph-toolchain/tree/master/hugegraph-loader)
+   stays an alternative for file-based imports. HugeGraph-side setup
+   (environment, `mappings`, vertex/edge import examples) is covered in the
+   [Import Graph Data with SeaTunnel Sink 
guide](/docs/quickstart/toolchain/import/hugegraph-seatunnel-connector/).
+
+   The [SeaTunnel 3.0.0 connector 
docs](https://seatunnel.apache.org/docs/3.0.0/introduction/about/) document
+   what to rely on:
+   - [Neo4j 
Source](https://seatunnel.apache.org/docs/3.0.0/connectors/source/Neo4j/) reads 
Cypher
+     query results with explicit field schemas; 3.0.0 adds multi-table reads 
via `tables_configs`.
+   - [HugeGraph 
Sink](https://seatunnel.apache.org/docs/3.0.0/connectors/sink/HugeGraph/) is
+     refactored in 3.0.0 with multi-mapping support — use the recommended 
`mappings` configuration
+     for vertices/edges and follow its schema-creation behavior.
+   - [HugeGraph 
Source](https://seatunnel.apache.org/docs/3.0.0/connectors/source/HugeGraph/) is
+     new in 3.0.0 (schema auto-discovery, multi-label/parallel reads), 
enabling HugeGraph export
+     and migration workflows.
+
+   Map Neo4j properties to HugeGraph PropertyKeys and pick the vertex ID 
strategy
+   before importing: use `idStrategy = "PRIMARY_KEY"` with a Neo4j business 
key in
+   `idFields` and express edge endpoints through those same key fields, or
+   `idStrategy = "CUSTOMIZE_STRING"` to keep the Neo4j node id. Labels you

Review Comment:
   ⚠️ Important: Blocking: no. Summary: Choosing `CUSTOMIZE_STRING` alone does 
not preserve Neo4j IDs; SeaTunnel requires `idFields` for every non-`AUTOMATIC` 
vertex strategy, and edge endpoints need separate source/target ID fields. 
Evidence: SeaTunnel 3.0.0 HugeGraph Sink docs mark `mappings.idFields` required 
when `idStrategy` is not `AUTOMATIC`, and require `sourceConfig.idFields` / 
`targetConfig.idFields`; the Neo4j Source schema must match fields returned by 
its query. Requested change: specify that the query returns the desired Neo4j 
ID, declare that field in `schema.fields`, set vertex `idFields` to it, and map 
the corresponding edge endpoint fields. Mirror the guidance in Chinese.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to