Skip to content

SQL: resolve the logical name of a multi-label Cypher VECTOR/FULLTEXT index #11014

Closed

Description

@robfrank

Follow-up of #10914 (PR #10994).

CREATE FULLTEXT INDEX docs FOR (n:Article|Post) ... and CREATE VECTOR INDEX over several labels or relationship types build one index per type and tie them together with a logical name that only openCypher resolves (CypherMultiTypeIndexes, a cypher.multiindex.<name> custom value on every member type).

What SQL sees today

  • The per-type indexes are ordinary indexes: SEARCH_INDEX('Post[title,body]', ...) and vector.neighbors('Post[e]', ...) find the data, and a record written through SQL is found by the logical name from Cypher (pinned by Issue10914MultiLabelVectorAndFulltextIndexTest).
  • The logical name (docs, emb) is not known to SQL, so a query across the types is one SQL query per type, merged by the caller.
  • DROP INDEX of a member index in SQL leaves the logical entry covering fewer types.
  • Schema introspection lists the per-type indexes, not the one logical row SHOW INDEXES gives in Cypher.

Goal

Data created through the Cypher statement is searchable by the same name from SQL.

Options

  1. Resolve the logical name in SEARCH_INDEX, SEARCH_FIELDS, vector.neighbors and the other index-name functions: fan out to the member indexes and merge. Needs the resolver moved out of opencypher into a place both engines use. Full-text scores merge by raw score (BM25 statistics are per per-type index), as in Cypher.
  2. Do not add a SQL form, and document the supertype pattern for SQL users: an index on a common supertype is polymorphic, has one set of BM25 statistics, and needs no logical name.
  3. Make a SQL DROP INDEX of a member keep the logical entry consistent (clear or refuse), independent of 1 and 2.

Decide between 1 and 2 first; 3 is wanted either way.

Activity

  1. added
    enhancementNew feature or request
    vectorVector index and embedding search
    severity:minorCosmetic, documentation, edge case, or a workaround exists
    on Oct 30, 2026
  2. self-assigned this
    on Oct 30, 2026
  3. added this to the 26.11.1 milestone on Oct 30, 2026
  4. added a commit that references this issue on Nov 2, 2026
  5. robfrank commented on Nov 2, 2026

    @robfrank
    CollaboratorAuthor

    Fixed in #11138 (options 1 and 3 of the issue). SEARCH_INDEX('docs', ...) and vector.neighbors('emb', ...) now accept the logical name of a multi-label Cypher index and merge results across the per-type indexes. SQL DROP INDEX of the logical name drops what Cypher built, dropping a member index is refused in SQL and Cypher, and CREATE INDEX with a logical name is refused.

    Still open: #11137 (SEARCH_INDEX_MORE, the HTTP/MCP search tools and schema introspection do not resolve the logical name yet); tests for a partial drop retry and for a logical index whose members were all dropped.


    ❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.

  6. removed
    in progressThe team is actively working on this issue
    on Nov 2, 2026
  7. added a commit that references this issue on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestopencypherseverity:minorCosmetic, documentation, edge case, or a workaround existssqlvectorVector index and embedding search

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions