Search code examples
orientdb

OrientDB - Creating an edge using rid's from index queries


I'm trying to create edges between existing vertices queried by their indexed IDs, similar to the first answer here, but using this index lookup query instead of the label query:

CREATE EDGE cite
FROM
(SELECT FROM index:<className>.<indexName> WHERE key = "<keyString>")
TO
(SELECT FROM index:<className>.<indexName> WHERE key = "<keyString>")

This gives me the following error: com.orientechnologies.orient.core.exception.OCommandExecutionException: Source vertex '#-1:-1' not exists

Possibly relevant:

When I just query SELECT FROM index:<className>.<indexName> WHERE key = "<keyString>" by itself it returns an array object structured like:

[ { '@type': 'd',
    key: '<keyString>',
    rid: { cluster: <actual cluster>, position: <actual position> }
    @rid: { cluster: -1, position: -1 } } ]

I'm guessing that the error has something to do with the CREATE EDGE query using the @rid instead of the rid but I'm not sure.

The query successfully creates the edges if I simply use the #<actual cluster>:<actual position> instead of the SELECT subquery.

Any ideas what I might be doing wrong?

Edit: In the interest of replicability, I have the same problem in the GratefulDeadConcerts database when I (1) add a property name to the V class schema, (2) create a unique nameIndex index of V using the name property under V, and then (3) use the following query: create edge followed_by from (select from index:nameIndex where key = 'HEY BO DIDDLEY') to (select from index:nameIndex where key = 'IM A MAN')


Solution

  • Why don't you query the class directly?

    CREATE EDGE cite
    FROM
    (select from Class where field = '<keyString>')
    TO
    (select from Class where field = '<keyString>')
    

    Select from index return a temp document as result set with key,and rid

    you can try but i don't know if it will work

    SELECT expand(rid) FROM index:<className>.<indexName> WHERE key = "<keyString>"