Microsoft Dynamics 365 comes with excellent searching capabilities where users can retrieve information with its query and filter options. A basic search can be performed with the quick search option and then the “Advanced Find” functionality can be further used to perform more advanced searching and filtering of records. From a single window in Microsoft Dynamics 365, a user can search any entity on any field. Additionally, with third-party components like PowerGlobalSearch, you can instantly view the information in a convenient and configurable reading pane.
Despite the rich and robust search functionality outlined above, you may come across scenarios where you would like to perform a search operation to find similar records such as:
- Different spelling of names like Neal/Neale or John/Jon, Jon or Smith/Smyth.
- Names that contain the search term, for instance, you user searches for “Sam” and results for Sam, Samantha, Samson are returned.
- Different variants of names. Ann Marie/Ann-Marie, Mike/Mike O’Leary, Mary Ann Johnson/Mary-Ann Johnson/MaryAnn Johnson.
These search scenarios are very common in almost all applications and businesses. Let’s consider a scenario where a police check screening is performed for a person to validate his criminal history. In this case, the screening process is of utmost importance as the check must be done for the person’s name against similar records which may be spelt differently. Inaccuracy in searching could have widespread ramifications.
While working on one Dynamics CRM online project, there was a business requirement where the client was after a phonetic search capability against customer names to validate the similar occurrence of names to aid data entry and quality.
The process of data entry is challenging due to ever-increasing information flow thereby affecting data consistency and accuracy. Although the need of manual data entry is reducing and is being replaced by data-driven options there is still a certain set of information where there is a need of manual data entry process like capturing user’s first name, last name etc. Almost every system captures user information which is utilised by various business in day-to-day activities for instance, customer service in a call centre captures client’s name over the phone which is again prone to human error and might be captured with a different spelling or format. This might also result in data being duplicated. Although there is a duplicate detection rule in Microsoft Dynamics 365 to contend with, in case if the same person’s name is spelt differently with other parameters like email address etc then it will be missed by duplicate detections rules.
As Dynamics 365 doesn’t come with any phonetic search capabilities, we decided to leverage Azure search. By utilising Azure Search, we can enhance the customer experience and increase the business value to customers by making search more user-friendly.
The following architectural diagram will give you a better overview of various components involved to achieve this functionality and how the communication works between them to accomplish the desired results.
In this scenario have a Screening entity and there is a Contact lookup on that entity. A screening entity is linked with one contact only. To resolve the contact name on our screening process, we implemented the following:
- A data export service for contacts. To setup DES please follow the link: https://appsource.microsoft.com/en-au/product/dynamics-365/mscrm.44f192ec-e387-436c-886c-879923d8a448?src=Dynamics365website&tab=Overview
- Create a search index in Azure Search Portal for contacts: https://docs.microsoft.com/en-us/azure/search/search-get-started-portal
- Lucene query syntax is used to retrieve data in Azure search. https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax
First, let’s set up the definition file for the Azure Search Analyzer with Phonetic search and Wild card search
Next, we send a request to Azure Search from a web resource. This will return the result set in JSON format.
Finally, we resolve the Contact on the Screening form and passing search results (contact Id, First Name, Last Name) to the Contact lookup, the Persons first name and the persons last name from a Web resource.