Перейти к содержимому
Последнее обновление

NGRAM_SEARCH

Описание​

Функция NGRAM_SEARCH вычисляет сходство двух строк по N-gram. Значение сходства находится в диапазоне от 0 до 1: чем оно выше, тем больше похожи строки.

N-gram разбивает строку на множество последовательностей из N подряд идущих символов. Формула вычисления сходства: 2 * |intersection| / (|set1| + |set2|)

Поддерживаются только символы ASCII.

Синтаксис​

NGRAM_SEARCH(<text>, <pattern>, <gram_num>)

Параметры​

ПараметрОписание
<text>Текстовая строка для сравнения. Тип: VARCHAR
<pattern>Строка-шаблон (должна быть константой). Тип: VARCHAR
<gram_num>Значение N для N-gram. Должно быть положительной целочисленной константой. Тип: INT.

Возвращаемое значение​

Возвращает сходство двух строк по N-gram в виде значения типа DOUBLE (от 0 до 1).

Особые случаи:

  • Возвращает NULL, если <text> или <pattern> равен NULL. <gram_num> должен быть положительной целочисленной константой и не может быть NULL
  • Если длина строки меньше <gram_num>, возвращается 0
  • <pattern> и <gram_num> должны быть константами. В ветке Doris 4.1 начиная с версии 4.1.5 недопустимые значения <gram_num>, такие как 0, отрицательное число или нецелочисленная константа, явно вызывают ошибку
  • Сходство, равное 1, не обязательно означает, что строки полностью идентичны

Пример​

  1. Базовое использование: вычисление сходства
SELECT ngram_search('123456789', '12345', 3);
+---------------------------------------+
| ngram_search('123456789', '12345', 3) |
+---------------------------------------+
| 0.6 |
+---------------------------------------+
  1. Пример высокого сходства
SELECT ngram_search('abababab', 'babababa', 2);
+-----------------------------------------+
| ngram_search('abababab', 'babababa', 2) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+
  1. Если строка слишком короткая, возвращается 0
SELECT ngram_search('ab', 'abc', 3);
+----------------------------------+
| ngram_search('ab', 'abc', 3) |
+----------------------------------+
| 0 |
+----------------------------------+
  1. Обработка значения NULL
SELECT ngram_search(NULL, 'test', 2);
+--------------------------------+
| ngram_search(NULL, 'test', 2) |
+--------------------------------+
| NULL |
+--------------------------------+

Недопустимое значение gram_num вызывает ошибку:

SELECT NGRAM_SEARCH('abc', 'abc', 0);
ngram_search(text,pattern,gram_num): gram_num must be a positive constant.

Ключевые слова​

NGRAM_SEARCH,NGRAM,SEARCH