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 and DistinctWords 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 not Generic Account or House Account.
  • Uses ignoreInToken to suppress tokenization on four attributes as they are deemed not helpful for identifying match candidates
  • Unnecessarily uses ExactOrNull and ExactOrAllNull 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
        }