Question:
We have created a match rule on exact phone number and type and fuzzy name for Contacts. This is a relevance based match rule and identifying two entities as potential match even though no common match token exists for them. Here is the API used:
curl --location 'https://geu-test.reltio.com/reltio/api/<tenantID>/entities/_verifyMatches?rules=configuration%2FentityTypes%2FContact%2FmatchGroups%2FExact_Phone_Fuzzy_FullName' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 245cadf4-8683-4ed2-a832-e6b9b5a0b269' \
--data '{
"first": {"uri":"entities/0002VNu"},
"second": {"uri":"entities/00Ipwus"}
}'
API response:
{
"matchTokensSummary": {
"firstTotal": 2,
"secondTotal": 2,
"summary": [
"There are no common match tokens for the given set of match rules. The entities are not considered as match candidates and won’t be compared.",
"There are no bypassed rules for the given entity type"
]
},
"applicableMatchGroups": {
"first": [
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName"
],
"second": [
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName"
],
"both": [
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName"
]
},
"rules": {
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName": {
"label": "Exact Phone and Fuzzy Full Name",
"useOvOnly": true,
"matchTokens": {
"first": {
"foundInMatchTables": true,
"tokens": [
"gMwNOSjQStg=",
"rEQb/ZJ7Q1E="
],
"tokensGenerated": 2
},
"second": {
"foundInMatchTables": true,
"tokens": [
"zXKkr+ZIOxg=",
"3G7JMUIgydw="
],
"tokensGenerated": 2
},
"intersection": {}
},
"rule": {
"relevance": 0.9285714285714287,
"and": [
{
"relevance": 0.9285714285714287,
"and": [
{
"exact": {
"Phone.Type": {
"ignoreInToken": false,
"relevance": 0.2
},
"Phone.Number": {
"ignoreInToken": false,
"relevance": 0.0
},
"CountryCode": {
"ignoreInToken": false,
"relevance": 0.2
}
},
"fuzzy": {
"Name": {
"ignoreInToken": true,
"relevance": 1.0
}
},
"relevance": 0.9285714285714287
}
]
}
]
},
"matchedByDocuments": true,
"bypassed": false,
"matched": false,
"relevance": 0.9285714285714287,
"matchAction": "POTENTIAL_MATCH"
}
}
}
Answer
Exact_Phone_Fuzzy_FullName is a relevance_based rule.
{
"uri": "configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"label": "Exact Phone and Fuzzy Full Name",
"type": "relevance_based",
As you can see in the potential match panel, these two entities have a relevance score of 92.85714285714288. So, rather than just look at "matched", you need to look at relevance.
"matchedByDocuments": true,
"bypassed": false,
"matched": false,
"relevance": 0.9285714285714287,
Based on the threshold that are defined in the L3 configuration, it will find a match
"actionThresholds": [
{
"type": "auto_merge",
"threshold": "0.95-1"
},
{
"type": "potential_match",
"threshold": "0.88-0.94"
}
]
We can see that the verify match has no common match tokens.
"summary": [
"There are no common match tokens for the given set of match rules. The entities are not considered as match candidates and won’t be compared.",
"There are no bypassed rules for the given entity type"
]
if you remove the rule uri from verify match, you will see the following
POST https://<environment>.reltio.com/reltio/api/<tenantId>/entities/_verifyMatches
Request payload
{ "first": {"uri":"entities/0002VNu"},
"second": {"uri":"entities/00Ipwus"}
}
Response
"matchTokensSummary": {
"firstTotal": 7,
"secondTotal": 6,
"common": [
"qLerKSd2p8Y="
],
"summary": [
"There are common match tokens. These entities are considered as match candidates and will be checked according to the list of common applicable match rules.",
"There are no bypassed rules for the given entity type"
]
},
"applicableMatchGroups": {
"first": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Email_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Exact_Email_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
],
"second": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
],
"both": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
]
},
It is possible that the two entities share a common token from a different rule. If you remove the rules parameter from the request and you will see the common token. Entities are compared if they share at least one common token and it does not matter which rule generated the common token.
The UI only shows Exact_Phone_Fuzzy_FullName because out of
"both": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
]
The match rules "configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName"
results in a match tokens finds the match candidate. The comparison logic identifies matches among those candidates.
If you look at the result from the following verify match.
curl --location 'https://geu-test.reltio.com/reltio/api/K00GUPnEoh69RBD/entities/_verifyMatches' \
--header 'Authorization: Bearer 4434a9f9-e254-4a53-99bb-669d85219922' \
--header 'Content-Type: application/json' \
--data '{ "first": {"uri":"entities/0002VNu"},
"second": {"uri":"entities/00005zi"}
}'
Result
"matchTokensSummary": {
"firstTotal": 7,
"secondTotal": 6,
"common": [
"qLerKSd2p8Y="
],
"summary": [
"There are common match tokens. These entities are considered as match candidates and will be checked according to the list of common applicable match rules.",
"There are no bypassed rules for the given entity type"
]
},
"applicableMatchGroups": {
"first": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Email_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Exact_Email_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
],
"second": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
],
"both": [
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_Firstname",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_LastName_Fuzzy_FirstName",
"configuration/entityTypes/Contact/matchGroups/Exact_Phone_Fuzzy_FullName",
"configuration/entityTypes/Contact/matchGroups/Fuzzy_Address_FullName"
]
},
Comments
Please sign in to leave a comment.