You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
SQL: resolve the logical name of a multi-label Cypher VECTOR/FULLTEXT index #11014
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
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.
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.
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.
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.
Activity
feat(#11014): SQL resolves the logical name of a multi-label Cypher V…
robfrank commentedon Nov 2, 2026
Fixed in #11138 (options 1 and 3 of the issue).
SEARCH_INDEX('docs', ...)andvector.neighbors('emb', ...)now accept the logical name of a multi-label Cypher index and merge results across the per-type indexes. SQLDROP INDEXof the logical name drops what Cypher built, dropping a member index is refused in SQL and Cypher, andCREATE INDEXwith 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.
feat(#11014): SQL resolves the logical name of a multi-label Cypher V…