curiosity

Article · Entity resolution

What is entity resolution?

Entity resolution decides which records describe the same real thing, such as a part, a supplier or an aircraft, and joins them into one entity. It matches records on a shared key where one exists, and on similar names and fields where none does. Done well, a question about a supplier finds every record about it, and none about its neighbor.

Topic Entity resolution Reading time 7 min References 7 Updated October 2026

In short

Entity resolution finds the records that describe the same real thing and joins them into one entity. The entity keeps a link to every record it came from. The thing can be a part, a supplier, a customer or an aircraft. The records can sit in one system or in ten.

The idea goes by many names. A tutorial by Lise Getoor and Ashwin Machanavajjhala defines it as “the problem of extracting, matching and resolving entity mentions in structured and unstructured data”. It lists record linkage, deduplication and reference reconciliation among the names other fields use for it.

Two neighbors are easy to confuse with it. Search finds records that look like a question; entity resolution decides that two records are the same thing. Entity linking connects a mention in text, such as a part number in a ticket, to an entity that already exists. Resolution decides what the entities are in the first place.

Why a graph needs it

A graph answers a question by following edges from one record to the next, and every edge hangs off an identity. Say the parts list writes P-220 rev C and the ticket system writes P220-C. The graph then holds two parts where there is one. A question that starts at the ticket never reaches the supplier notice filed against the part.

Duplicates also break counts. William Winkler of the U.S. Census Bureau notes in his overview of record linkage that duplicates in a list of businesses inflate the estimates for each industry. In a plant the same error makes one supplier look like three small ones, and spreads its open quality issues thin.

What is a knowledge graph? explains why identity matters to a graph. This article is about getting identity right when the systems disagree.

How it resolves

Four records, two suppliers

Four systems name a supplier four ways. A shared key joins two records, a standardized name joins a third, and a similar name stays apart. Pick a step to stop the drawing and read it.

Four records resolved into two suppliers Four records from an ERP, a supplier notice, a ticket and a quality report. The ERP record and the notice share vendor number 40117 and join. The ticket, with a misspelled name and the same city, joins as a scored match. Hartmann Hydraulik in Kassel stays a supplier of its own. Supplier S-12 links to three records. ERP · VENDOR 40117Hartmann Dichtungen GmbHKEY 40117NOTICE · VENDOR 40117HARTMANN DICHTUNGENKEY 40117TICKET · BREMENHartman DichtungenNAME + CITYQUALITY REPORT · KASSELHartmann Hydraulik AGNO MATCHSUPPLIER · S-12HartmannDichtungenVendor 40117 · Bremen3 RECORDSSUPPLIER · S-31Hartmann Hydraulik
Four records resolved into two suppliers Four records name a supplier four ways. Two share vendor number 40117, the ticket joins on its name and city, and Hartmann Hydraulik stays a supplier of its own. Supplier S-12 links to three records. ERPHartmann Dichtungen GmbHKEY 40117S-12NOTICEHARTMANN DICHTUNGENKEY 40117S-12TICKETHartman DichtungenNAME + CITYS-12QUALITY REPORTHartmann Hydraulik AGNO MATCHS-31SUPPLIER · S-12Hartmann Dichtungen3 RECORDS
  1. 01

    Four records, four systems

    The ERP, a supplier notice, a ticket and a quality report each name a supplier in their own way.

  2. 02

    An exact key

    The ERP record and the notice carry the same vendor number, 40117. They join with no scoring.

  3. 03

    Standardize, then compare

    The ticket has no vendor number. Its name, one letter short, and its city agree, so it joins as a scored match.

  4. 04

    A similar name stays apart

    Hartmann Hydraulik shares a word, not a city or a key. It becomes a supplier of its own.

  5. 05

    One supplier, three records

    Supplier S-12 links to all three of its records. A question about it now finds every one.

How a match is made

Most entity resolution runs in four steps.

  1. Standardize. Bring each field to one form: case, spacing, separators, legal forms such as GmbH, units and dates. P220-C and P-220 rev C become one value once both are written the same way.
  2. Block. Compare only the pairs that could match, such as records with the same postcode or the same part family. The Splink documentation gives the reason: “a dataset of 1 million input records would generate around 500 billion pairwise record comparisons.”
  3. Compare and score. Check each field of a candidate pair and add up the evidence. Fellegi and Sunter published the classic model for this in 1969, and Winkler’s overview describes it. Each pattern of agreement is weighed by how often it occurs among true matches and among non-matches. Two suppliers in the same city say little. Two with the same tax number say a lot.
  4. Decide and merge. Join the pairs that clear a cutoff into one entity, choose its canonical name and fields, and keep a link to each source record.

Matching keys and fuzzy matching

The cheapest match is a shared key: a vendor number, a serial number, a tax number. When two systems carry the same key for the same thing, the match is exact and needs no score. Start with keys, and only score what they leave unmatched.

Keys fail in their own ways. Each system tends to have its own: the ERP knows vendor 40117, the ticket system only a name. Some keys move. An aircraft’s registration can change when it is sold abroad, while the manufacturer’s serial number stays with the airframe. Choose the key that stays with the thing.

Where no key is shared, fuzzy matching compares what is left: names, addresses, descriptions. It counts how many characters differ, so it absorbs typos and spelling variants. That suits names and does not suit identifiers. Our text search documentation makes the point for ticket numbers: a ticket one character away from T-9182 is a different ticket, not a typo. Part numbers and revisions behave the same way. Standardize an identifier, then match it exactly.

False merges and missed matches

Every cutoff trades two errors. A missed match leaves apart two records that describe one thing, and the graph has a gap: a question about the supplier misses a third of its notices. A false merge joins two different things. That error spreads, because every edge of one now looks like an edge of the other.

The two errors do not cost the same. A missed match costs completeness, and someone who knows the supplier usually notices. A false merge produces confident wrong answers: revision C of a part inherits the deviation raised against revision D, and an assistant cites it. In regulated work, count a false merge as the more expensive error and set the cutoffs for it.

The classic answer is a third zone between the two cutoffs. Winkler’s decision rule for a pair there reads: “designate pair as a possible match and hold for clerical review.” A person decides those pairs, and the rule decides the rest.

Where to draw the line

Two cutoffs, three zones

Each square is a scored pair of records. The cutoffs decide which pairs are merged, which stay apart, and which wait for a person.

Two cutoffs decide which pairs are merged Scored pairs of records stacked along a score axis, different things mostly on the left and the same thing mostly on the right, overlapping in the middle. Above the upper cutoff pairs are merged, below the lower cutoff they stay apart, and between them a person decides. One pair of different things above the upper cutoff is a false merge, and one matching pair below the lower cutoff is a missed match. LOW SCOREHIGH SCOREMERGEDKEPT APARTA PERSON DECIDESMISSED MATCHFALSE MERGESAME THINGDIFFERENT THINGS
Two cutoffs decide which pairs are merged Scored pairs stacked along a score axis. Above the upper cutoff pairs are merged, below the lower cutoff they stay apart, and between them a person reviews them. The dashed squares are a missed match and a false merge. LOW SCOREHIGH SCOREMERGEDKEPT APARTREVIEWDASHED: MISSED MATCH, FALSE MERGESAME THINGDIFFERENT
  1. 01

    Score every pair

    Each square is a candidate pair, placed by its score. Ink pairs are the same thing, stone pairs are not.

  2. 02

    Merge above the upper cutoff

    Pairs that score this high are merged with nobody looking.

  3. 03

    Keep apart below the lower cutoff

    Pairs that score this low stay separate records.

  4. 04

    A person decides the rest

    Pairs between the cutoffs wait for review, one at a time.

  5. 05

    The errors that get through

    A stone pair above the upper cutoff is a false merge. An ink pair below the lower one is a missed match.

How it goes wrong

  • Matching on a field that is not an identity. Two suppliers in different countries can share a name, and two parts can share a description.
  • Merges with no way back. A merge that discards the old ids cannot be undone, and an answer can no longer be traced to the record it came from.
  • Blocking that hides matches. A block on postcode never compares a supplier with the same supplier at its new address.
  • One pass, then never again. New records arrive every day. Resolution that ran once, at load time, drifts away from the sources.
  • Merged fields that ignore access. An entity that copies fields from a restricted record can show them to people who may not open that record.

How to evaluate it

Five questions, asked of a sample of your own records rather than a demo set:

  1. Which key identifies each type in each system, and does that key stay with the thing?
  2. Check 100 resolved entities by hand. How many are false merges, and how many matches were missed?
  3. Where are the cutoffs, and who reviews the pairs between them?
  4. Can every entity list the records it was built from, and can a merge be undone?
  5. When a new record arrives, how long until it is resolved against the rest?

How Curiosity does it

In Curiosity Studio every node type has a key. The graph model documentation explains that the key decides whether a record updates an existing node or creates a new one. Connectors from more than 70 systems write records by their key. Loading the same record again updates its node instead of adding a second one.

Where a record names an entity in its text, entity linking connects the mention to an existing node with a _Mentions edge. Spotters match a list of canonical names and their aliases. Pattern spotters match identifiers such as ticket numbers. A node can also carry aliases of its own, so it is found under its other names.

When two nodes turn out to be one, code can merge them. The edges move to the node you keep, and the merged node’s key can stay on it as a searchable alias. An administrator can do the same from the data views. Access is synced from the source systems and checked per record at query time. The knowledge graph and data enrichment pages cover the developer side.

FAQ

Questions people ask

Is entity resolution the same as deduplication?

Deduplication is one case of it: finding records that describe the same thing within one list. Entity resolution also matches records across systems that use different keys, names and formats, and keeps a link from the resolved entity to each source record.

Should fuzzy matching be used on part numbers?

Rarely. A part number one character away is usually a different part or revision, not a typo. Standardize identifiers first, such as case and separators, and then match them exactly. Keep fuzzy matching for names, addresses and descriptions.

What happens to a record’s id when it is merged in Curiosity Studio?

When code merges two nodes as aliases, the edges of the merged node move to the node you keep and the merged node is deleted. Its key, or another field you name, stays on the kept node as a searchable alias, so a search for the old id still finds it.

Who decides a match the rules cannot settle?

A person. The usual design has two cutoffs: pairs above the upper one are merged, pairs below the lower one stay apart, and the pairs between them are held for review. Moving the cutoffs apart lets fewer errors through and sends more pairs to review.

Your data. Your infrastructure.

One part, one supplier, one answer.