в этой статье мы поговорим о

  • Что такое нечеткий поиск?
  • Почему нечеткий поиск важен?
  • Пример приложений на основе нечеткого поиска в реальном времени.
  • Как реализовать нечеткий поиск в SAP HANA?

Что такое нечеткий поиск?

Также известен как приблизительное сопоставление строк.
Нечеткий поиск – это метод поиска строк, которые приблизительно (а не точно) соответствуют шаблону.
Это тип поиска, при котором совпадения будут найдены, даже если пользователи ошибаются в написании слов или введите только часть слов для поиска.
цель:
с помощью нечеткого поиска орфографические ошибки и опечатки по-прежнему дают релевантные результаты.

Стать сертифицированным специалистом по SAP Hana, изучив этот HKR Обучение SAP Hana

Пример из реальной жизни.
Если пользователь вводит «SAP HANA Tutorl» в Yahoo или Google (оба из них используют нечеткое соответствие), возвращается список результатов вместе с вопросом: « Возможно, вы имели в виду «Учебник по SAP HANA»?

Нечеткий поиск в SAP HANA:

В SAP HANA нечеткий поиск можно вызвать с помощью предиката CONTAINS с параметром FUZZY в предложении WHERE инструкции SELECT.
Синтаксис:
SELECT * FROM ‹tablename ›
WHERE CONTAINS (‹column_name›, ‹search_string›, FUZZY (0.8))

Поиск с НЕЧЕТКИМ(x) возвращает все значения, которые имеют нечеткую оценку больше или равную x.

Функция SCORE()
Алгоритм нечеткого поиска вычисляет нечеткую оценку для каждого сравнения строк. Чем выше оценка, тем более похожи строки. Оценка 1,0 означает, что строки идентичны. Оценка 0,0 означает, что строки не имеют ничего общего.

Вы можете запросить оценку в операторе SELECT, используя функцию SCORE().

Вы можете отсортировать результаты запроса по баллам в порядке убывания, чтобы сначала получить лучшие записи (лучшая запись — это запись, которая больше всего похожа на ввод пользователя). Когда в операторе SELECT используется нечеткий поиск по нескольким столбцам, оценка возвращается как среднее значение оценок всех используемых столбцов.

Таким образом, он не только находит «отказоустойчивое» совпадение, но и ставит за ним счет.

Пример.
При поиске с использованием «SAP» запись типа «SAP AG» получает высокий балл, поскольку термин «SAP» существует в текстах. Такая запись, как «BSAP Corp», получает более низкий балл, потому что «SAP» является лишь частью более долгосрочного термина «BSAP Corp».

Создайте таблицу и данные:
— ЗАМЕНИТЕ ‹Schema_Name› СВОИМ ИМЯ СХЕМЫ
CREATE COLUMN TABLE ‹Schema_Name›.COMPANIES(
ID INTEGER PRIMARY KEY,
/> COMPANY_NAME SHORTTEXT(200) ИНДЕКС НЕЧЕТКОГО ПОИСКА ВКЛ);

ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (1, 'SAP');
ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (2, 'SAP in Walldorf');
ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (3, 'SAP AG');
ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (4, 'ASAP Corp');
ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (5, 'BSAP orp') ;
ВСТАВИТЬ В ‹Schema_Name›.COMPANIES VALUES (6, 'IBM Corp');

Выполните поиск в одном столбце:
ВЫБЕРИТЕ SCORE() КАК оценка, * FROM ‹Schema_Name›.COMPANIES
WHERE CONTAINS(COMPANY_NAME, 'SAP',
FUZZY (0,7,'textSearch=compare,bestMatchingTokenWeight=0,7'))
ORDER BY score DESC;

Результат нечеткого поиска содержит 5 записей. На основе коэффициента нечеткого поиска (который в данном случае равен 0,7) он также будет рассматривать похожие слова. В этом случае «SAP AG», «BSAP orp» и т. д.

Пример нечеткого поиска в реальном времени:

Случай использования

Сотрудник колл-центра, который получает заказ по телефону, должен знать номер клиента или, в случае новой записи, система должна сообщить ему о потенциально дублирующейся записи.

Есть вероятность, что имя может быть написано с ошибкой или это может быть другой человек с таким же именем, но с разным написанием. Например, «Джими Хендрикс» может быть написано с ошибкой как «Джими Хендрикс» или «Джими Хендрикс». Или адрес тоже может быть написан по другому. Например, «Berliner Platz 43», «Berliner Plats 43» или «Berliner Platz».

Без системы нечеткого поиска можно найти только точное совпадение, то есть только те записи, которые на 100% идентичны. Но с помощью системы нечеткого поиска можно найти и слова с ошибками.

Создайте таблицу и некоторые данные:

— ЗАМЕНИТЕ ‹Имя_схемы› НА ИМЯ СХЕМЫ

создать таблицу столбцов ‹Schema_Name›.»CUSTOMERS»(

«CUSTOMER_ID» VARCHAR (5) не нуль по умолчанию ‘’,

«FIRST_NAME» VARCHAR (20) null по умолчанию ‘’,

«LAST_NAME» VARCHAR (20) null по умолчанию ‘’,

«УЛИЦА» VARCHAR (20) ноль по умолчанию ‘’,

«ГОРОД» VARCHAR (20) ноль по умолчанию ‘’,

«СТРАНА» VARCHAR (20) ноль по умолчанию ‘’,

«POSTAL_CODE» VARCHAR (20) null по умолчанию ‘’,

первичный ключ («CUSTOMER_ID»));

вставить в ‹Schema_Name› значения «CUSTOMERS» («00001», «Jimi», «Hendricks», «Berliner Platz 43», «Munchen», «Германия», «80805»);

вставить в ‹Schema_Name› значения «CUSTOMERS» («00002», «Jimy», «Hendricks», «Berlinr Platz 43», «Munchen», «Германия», «80805»);

вставить в ‹Schema_Name› значения «CUSTOMERS» («00003», «Jimi», «Hendrix», «Berliner Plats 43», «Munchen», «Германия», «80805»);

вставить в ‹Schema_Name› значения "CUSTOMERS" ("00004", "Jimy", "Feuer", "Berliner", "Munchen", "Germany", "80805");

вставить в ‹Schema_Name› значения "CUSTOMERS" ("00006", "Sven", "Ottlieb", "Walserweg 21", "Aachen", "Германия", "52066");

вставить в ‹Schema_Name› значения "CUSTOMERS"('00007','Philip','Cramer','Maubelstr. 90','Brandenburg','Германия','14776');

вставить в ‹Schema_Name› значения «КЛИЕНТЫ» («00008», «Renate», «Messner», «Magazinweg 7», «Франкфурт», «Германия», «60528»);

вставить в ‹Schema_Name› значения «CUSTOMERS» («00009», «Александр», «Фойер», «Heerstr. 22», «Лейпциг», «Германия», «04179»);

вставить в ‹Schema_Name› значения «КЛИЕНТЫ» («00010», «Антонио», «Морено», «Матадерос 2312», «Мексика», «Мексика», «05023»);

вставить в ‹Schema_Name› значения «CUSTOMERS» («00011», «Thomas», «Hardy», «120 Hanover», «London», «UK», «WA1 1DP»);

вставить в ‹Schema_Name› значения «CUSTOMERS» («00012», «Christina», «Berglund», «Berguvsvagen 8», «Lulea», «Sweden», «S-958 22»);

Без нечеткого поиска:

Предположим, вы хотите найти клиента по имени «Джими».

SQL-запрос:

ВЫБЕРИТЕ * ИЗ ‹Имя_схемы›.»КЛИЕНТЫ»

ГДЕ СОДЕРЖИТ (FIRST_NAME, «Джими»)

ЗАКАЗ ПО DESC «CUSTOMER_ID»;

Вывод будет содержать только одну запись, которая содержит точное совпадение «Джими».

Теперь давайте попробуем функцию нечеткого поиска.

SQL-запрос:

ВЫБЕРИТЕ ОЦЕНКУ () КАК оценку, * ОТ ‹Имя_схемы›.»КЛИЕНТЫ»

ГДЕ

СОДЕРЖИТ(FIRST_NAME, 'Джими', FUZZY(0.7))

ЗАКАЗАТЬ ПО счету DESC;

Результат нечеткого поиска содержит 4 записи. На основе коэффициента нечеткого поиска (который в данном случае равен 0,7) он также будет рассматривать похожие слова. В данном случае «Джими».

Мы также можем выполнить нечеткий поиск по 2 столбцам. Например, Имя и Фамилия.

SQL-запрос:

ВЫБЕРИТЕ ОЦЕНКУ () КАК оценку, * ОТ ‹Имя_схемы›.»КЛИЕНТЫ»

ГДЕ

СОДЕРЖИТ(FIRST_NAME, 'Джими', FUZZY(0.7))

и СОДЕРЖИТ(LAST_NAME, ‘Hendricks’, FUZZY(0.7))

ЗАКАЗАТЬ ПО счету DESC;

Вывод содержит 3 записи. На основе коэффициента нечеткого поиска (который в данном случае равен 0,7) он также будет рассматривать похожие имена. В данном случае «Джими Хендрикс» и «Джими Хендрикс».