Example 2 - Using a Custom Comparator and Token Class
This example provides information about how to use a custom comparator.
Please review the example match rule configuration below. It has the following characteristics:
- Uses a custom comparator class and custom match token class for the Organization Name.
- Uses the
DistinctWords
comparator andDistinctWords
match token class as the basis for the custom classes. - Notice the symmetry of how the comparator and match token classes are defined.
- Uses the Stemmer and Soundex functions within the custom classes.
- Uses a custom noise words dictionary.
- Uses exact match on five attributes, and fuzzy on one attribute.
- Only operates on profiles where the address type =
Shipping
- Only operates on profiles where the
OrgJourneyStatus
is notGeneric Account
orHouse Account
. - Uses
ignoreInToken
to suppress tokenization on four attributes as they are deemed not helpful for identifying match candidates - Unnecessarily uses
ExactOrNull
andExactOrAllNull
together. Only one of them should have been used.
{
"uri": "configuration/entityTypes/Organization/matchGroups/FuzzyNameandExactAddressPhone",
"label": "(Fuzzy) Name, (Exact) AddressLine1, City, State, Phone Number, (Equals) Shipping",
"type": "suspect",
"scope": "ALL",
"useOvOnly": "true",
"rule": {
"matchTokenClasses": {
"mapping": [
{
"attribute": "configuration/entityTypes/Organization/attributes/Name",
"parameters": [
{
"parameter": "groups",
"values": [
{
"classParams": {
"threshold": "45%",
"useStemmer": "true",
"useSoundex": "true"
},
"className": "com.reltio.match.token.DistinctWordsMatchToken",
"noiseDictionary": "https://s3.amazonaws.com/reltio.match.test/Acme/AcmeNoiseDictionary.txt"
}
]
}
],
"class": "com.reltio.match.token.CustomMatchToken"
}
]
},
"comparatorClasses": {
"mapping": [
{
"attribute": "configuration/entityTypes/Organization/attributes/Name",
"parameters": [
{
"parameter": "groups",
"values": [
{
"classParams": {
"threshold": "45%",
"useStemmer": "true",
"useSoundex": "true"
},
"className": "com.reltio.match.comparator.DistinctWordsComparator",
"noiseDictionary": "https://s3.amazonaws.com/reltio.match.test/Acme/AcmeNoiseDictionary.txt"
}
]
}
],
"class": "com.reltio.match.comparator.CustomComparator"
}
]
},
"and": {
"exact": [
"configuration/entityTypes/Organization/attributes/Addresses/attributes/AddressLine1",
"configuration/entityTypes/Organization/attributes/Addresses/attributes/City",
"configuration/entityTypes/Organization/attributes/Addresses/attributes/StateProvince",
"configuration/entityTypes/Organization/attributes/Phone/attributes/Number",
"configuration/entityTypes/Organization/attributes/Addresses/attributes/AddressType"
],
"equals": [
{
"values": [
"Shipping"
],
"uri": "configuration/entityTypes/Organization/attributes/Addresses/attributes/AddressType"
}
],
"fuzzy": [
"configuration/entityTypes/Organization/attributes/Name"
],
"ignoreInToken": [
"configuration/entityTypes/Organization/attributes/Phone/attributes/Number",
"configuration/entityTypes/Organization/attributes/Addresses/attributes/AddressType",
"configuration/entityTypes/Organization/attributes/BuyerLifecycleStatus/attributes/OrgJourneyStatus",
"configuration/entityTypes/Organization/attributes/Addresses/attributes/StateProvince"
],
"notEquals": [
{
"values": [
"Generic Account",
"House Account"
],
"uri": "configuration/entityTypes/Organization/attributes/BuyerLifecycleStatus/attributes/OrgJourneyStatus"
}
],
"or": {
"exactOrNull": [
"configuration/entityTypes/Organization/attributes/DUNSNumber"
],
"exactOrAllNull": [
"configuration/entityTypes/Organization/attributes/DUNSNumber"
]
}
}
},
"scoreStandalone": 0,
"scoreIncremental": 0
}