Feature Description (功能描述)
Background
PR #2994 keeps queries that combine a negative label predicate with user-property
filters on the conservative no-index path. This prevents an index plan from
returning only the subset of labels that happen to have a compatible index.
Problem
Consider:
g.V().has(T.label, P.neq("author")).has("city", "Beijing")
The labels that can satisfy this query may include person, fan, and
follower. If only person has a city index, selecting that index returns
matching person vertices while silently omitting matching fan and
follower vertices.
An available partial index must never be used when it cannot produce a complete
candidate set.
Goal
Safely support negative-label predicates combined with property filters while
preserving complete query results.
Requirements
- Determine all schema labels that can satisfy the negative-label predicate and
- expose the queried property.
- Select an index plan only when every eligible label has compatible index
- coverage.
- When coverage is incomplete, either reject with
NoIndexException or use an
- explicitly bounded complete-scan plan.
- Never return a partial indexed subset as the query result.
- Preserve the current behavior of pure label predicates, for example:
g.V().has(T.label, P.neq("author")).
- Cover
neq, NOT_IN / equivalent flattened predicates, and multi-label
- cases where only some labels are indexed.
- Add tests that verify no eligible label is skipped and that paging/limit are
- applied only after a complete candidate set is established.
Related
#2992
PR #2994
Feature Description (功能描述)
Background
PR #2994 keeps queries that combine a negative label predicate with user-property
filters on the conservative no-index path. This prevents an index plan from
returning only the subset of labels that happen to have a compatible index.
Problem
Consider:
The labels that can satisfy this query may include
person,fan, andfollower. If only
personhas acityindex, selecting that index returnsmatching
personvertices while silently omitting matchingfanandfollower vertices.
An available partial index must never be used when it cannot produce a complete
candidate set.
Goal
Safely support negative-label predicates combined with property filters while
preserving complete query results.
Requirements
NoIndexExceptionor use ang.V().has(T.label, P.neq("author")).neq,NOT_IN/ equivalent flattened predicates, and multi-labelRelated
#2992
PR #2994