How entity search and relations work
Entity search looks entities up by name and by meaning, then keeps the ones that a visible passage mentions. Explore relationships walks the stored relations from one entity and sorts each edge by whether a passage states it.
Entity search


- The call checks the scope and finds the labels to search. Without
labels, it searches every entity label that has a vector index, which are the labels of your graph schema. Chunk, community, and resolved-entity nodes are not entity labels. - The call checks that each label has a full-text index on
nameand a vector index onembedding. A missing or offline index returnsindex_not_ready. - The keyword search matches the words of the query against the entity name. The semantic search embeds the query and searches the entity embeddings. Each reads up to four times
limitcandidates for each label, up to 1000. - In
hybridmode the call fuses the two ranked lists with reciprocal rank fusion and the constant 60. The other modes use the order of their own search. - The call reads the passages that mention each candidate entity and keeps the visible ones. A passage is visible when its document is in scope, its version is current, and no job is still writing it. An entity is returned only when a passage in scope mentions it.
- Each returned entity lists up to
support_limitpassages as evidence ids. The default is 3, and the agent and the MCP server use the default.
The query rules of passage search apply. The keyword search reduces the query to plain lowercase words, so Lucene syntax has no effect, and the semantic search has no similarity threshold. How passage search works describes both searches.
An entity that passages in scope mention, none of which is current, comes back as unsupported with no passages. An entity that no passage in scope mentions does not come back at all.
Relationship walk


- The call checks that
entity_idis a canonical lowercase UUID string and that the entity has at least one visible passage in scope. Otherwise the result ismalformedorunavailable. - The walk follows relations that join two entities. With
relation_types, only those types are followed. Without it, every relation type of the schema is followed. Graph-owned types such asHAS_PARTandMENTIONED_INare never followed. - Each step reads the edges around the entities found so far. An edge with a visible passage in scope is an
assertion, and the edge lists up to three of those passages. An edge with no passage is apath. An edge whose passages are all superseded or out of scope is dropped. - The walk stops at the first bound it reaches in each step, and
truncated_bylists every bound that cut the walk.
Design choices
An entity hit carries its supporting passages. An entity in a graph is a claim that extraction made, and a passage is the source. Returning both lets a caller read before trusting, and it shows an unsupported entity instead of hiding it.
Edges are either assertions or paths. Many graphs link entities by co-occurrence or by inference, and a caller that treats every edge as a stated fact repeats errors with confidence. The edge kind states what the graph knows.
Depth stops at two. The node, edge, and candidate bounds also cap the response, and truncated_by names the bound that cut the walk, so a caller can narrow with relation_types and walk again.
Related
- Entity search lists the inputs, the result fields, and an example hit.
- Explore relationships lists the inputs, the bounds, and the statuses.
- Resolved entities explains how duplicate entities are merged.