What is Fuzzy Search & how to implement Fuzzy Search Technique for a Report Program using AMDP Class ?
What is Fuzzy Search ?
- A technique of finding the strings that match a pattern approximately (rather than exactly).
- A fault-tolerant search, which returns records even if the search term contains typos or additional/missing characters.
- Example: Typing ‘Wether’ in Google will also return a list of hits corresponding to ‘Weather/Whether’.
- The below figure gives us the clear idea.
Fig: Google (Source)
Fuzzy Search in SAP HANA:
- Can be applied in the WHERE clause of a SELECT statement using the function ‘CONTAINS’ with the option ‘FUZZY’
- SELECT * FROM <table_name> WHERE CONTAINS (<column_name>, <search_string>, FUZZY(x) ).
- <table_name> can be name of a column table, attribute view or a SQL view created with the CREATE VIEW statement
- FUZZY(x) specifies the degree of accuracy required between the strings used in comparison (<column_name> and <search_string>)
- ‘x’ in FUZZY(x) is called a fuzzy factor and can have values between 0 and 1.
- If only FUZZY is specified, it takes the value of x as 0.8
- If FUZZY(x)/FUZZY is not provided, an exact match is searched.
- CONTAINS function can also be used in a SELECT query with JOIN.
- 0 being least accuracy and 1 being highest accuracy.
What is AMDP Class ?
- An AMDP Class is a global class existing in the class library with a tag interface IF_AMDP_MARKER_HDB (to indicate AMDP classes for the HANA Database Server)
- Can contain both regular methods and AMDP methods
- A method is indicated as an AMDP method in the implementation section of the class using the addition BY DATABASE PROCEDURE in the METHOD statement
- Can only be created using ADT.
- An AMDP method is called in an ABAP program in the same way as any other ABAP Objects method.
How to implement Fuzzy Search using AMDP Class ?
Custom Table (ZSCARR) created as a part of this blog post and maintained the entries as shown in the below figures.
Simple Use Case:
Suppose , you have 100000’s of record and you need to join multiple tables and fetch the output/data accordingly and the end user just wants to see the probable output based on the input provided by him. In this case , Fuzzy Search Technique comes handy.
- AMDP Class with Fuzzy Technique:
- Consuming AMDP Class in Report Program:
- Output when Fuzzy is 0.1
- Output when Fuzzy is 0.5
- Output when Fuzzy is 1
- Fuzzy Search is a technique of finding strings that match a pattern approximately (rather than exactly).
- Fuzzy Search in SAP HANA makes use of two functions – CONTAINS() which performs search on strings and SCORE() which returns fuzzy score.
Thanks !! Abhinav Mehrotra
Hi Pavan Patil ,
Is it possible to pass multiple entries as an input to the select query in AMDP method? Because in my scenario I need to make use of fuzzy search for multiple records and instead of calling above method in loop, I am expecting to get the result for all records at once.
Trying to achieve that using below but syntax error:
im_t_customer --> is an importing parameter(table type) with customer names
Could you suggest if it is possible.
Were you able to achieve it. I am also looking for the same kind of requirement. By passing multiple input values in the search string, but contains keyword is not supporting the second argument as Column value or a table.
Can you Please help.
Hi Prince ,
Hi Pavan Patil,
For Dynamic Client, better you can take 'SESSION_CONTEXT( 'CLIENT' )' instead of hard coded mandt field value '100'.
Exactly I didn't use it in these screenshots . Yes , its always better to use session variables.
What are the perquisites to activated Fuzzy Search in SAP HANA tables
Is it possible to give the fuzzy factor a number from a parameter ?