Функции для поиска в строках
Все функции в этом разделе выполняют поиск с учетом регистра по умолчанию. Поиск без учета регистра обычно предоставляется отдельными вариантами функций.
Поиск без учета регистра следует правилам нижнего и верхнего регистра английского языка. Например, заглавная буква i
в английском языке это I
, в то время как в турецком языке это İ
— результаты для языков, отличных от английского, могут быть неожиданными.
Функции в этом разделе также предполагают, что искомая строка (в этом разделе называемая haystack
) и строка поиска (в этом разделе называемая needle
) закодированы в одно байтовом формате. Если это предположение нарушается, исключение не выбрасывается, и результаты не определены. Поиск с закодированными строками UTF-8 обычно предоставляется отдельными вариантами функций. Точно так же, если используется вариант функции UTF-8, и входные строки не являются текстом в кодировке UTF-8, исключение не выбрасывается, и результаты не определены. Обратите внимание, что автоматическая нормализация Unicode не выполняется, однако вы можете использовать функции normalizeUTF8*() для этого.
Общие функции строк и функции для замены в строках описаны отдельно.
position
Возвращает позицию (в байтах, начиная с 1) подстроки needle
в строке haystack
.
Синтаксис
Псевдоним:
position(needle IN haystack)
Аргументы
haystack
— строка, в которой выполняется поиск. String или Enum.needle
— подстрока, которую нужно найти. String.start_pos
– позиция (индексация с 1) вhaystack
, с которой начинается поиск. UInt. Необязательный.
Возвращаемое значение
- Начальная позиция в байтах, начиная с 1, если подстрока была найдена. UInt64.
- 0, если подстрока не была найдена. UInt64.
Если подстрока needle
пуста, применяются следующие правила:
- если
start_pos
не указан: вернуть1
- если
start_pos = 0
: вернуть1
- если
start_pos >= 1
иstart_pos <= длина(haystack) + 1
: вернутьstart_pos
- в противном случае: вернуть
0
Эти же правила также применимы к функциям locate
, positionCaseInsensitive
, positionUTF8
и positionCaseInsensitiveUTF8
.
Примеры
Запрос:
Результат:
Пример с аргументом start_pos
:
Запрос:
Результат:
Пример для синтаксиса needle IN haystack
:
Запрос:
Результат:
Примеры с пустой подстрокой needle
:
Запрос:
Результат:
locate
Как position, но с аргументами haystack
и locate
, перевернутыми.
Поведение этой функции зависит от версии ClickHouse:
- в версиях < v24.3
locate
был псевдонимом функцииposition
и принимал аргументы(haystack, needle[, start_pos])
. - в версиях >= 24.3
locate
является отдельной функцией (для лучшей совместимости с MySQL) и принимает аргументы(needle, haystack[, start_pos])
. Предыдущее поведение можно восстановить, используя настройку function_locate_has_mysql_compatible_argument_order = false;
Синтаксис
positionCaseInsensitive
Непосредственный аналог функции position без учета регистра.
Пример
Запрос:
Результат:
positionUTF8
Как position, но предполагает, что haystack
и needle
являются строками в кодировке UTF-8.
Примеры
Функция positionUTF8
правильно считает символ ö
(представленный двумя точками) как единый кодовый пункт Unicode:
Запрос:
Результат:
positionCaseInsensitiveUTF8
Как positionUTF8, но выполняет поиск без учета регистра.
multiSearchAllPositions
Как position, но возвращает массив позиций (в байтах, начиная с 1) для нескольких подстрок needle
в строке haystack
.
Все функции multiSearch*()
поддерживают только до 28 подстрок.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- Массив начальной позиции в байтах и счет с 1, если подстрока была найдена.
- 0, если подстрока не была найдена.
Пример
Запрос:
Результат:
multiSearchAllPositionsCaseInsensitive
Как multiSearchAllPositions, но игнорирует регистр.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- Массив начальной позиции в байтах и счет с 1 (если подстрока была найдена).
- 0, если подстрока не была найдена.
Пример
Запрос:
Результат:
multiSearchAllPositionsUTF8
Как multiSearchAllPositions, но предполагает, что строки haystack
и needle
являются строками в кодировке UTF-8.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— подстроки в кодировке UTF-8, которые необходимо найти. Array.
Возвращаемое значение
- Массив начальной позиции в байтах и счет с 1 (если подстрока была найдена).
- 0, если подстрока не была найдена.
Пример
Дано ClickHouse
в формате UTF-8, найти позиции C
(\x43
) и H
(\x48
).
Запрос:
Результат:
multiSearchAllPositionsCaseInsensitiveUTF8
Как multiSearchAllPositionsUTF8, но игнорирует регистр.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— подстроки в кодировке UTF-8, которые необходимо найти. Array.
Возвращаемое значение
- Массив начальной позиции в байтах и счет с 1 (если подстрока была найдена).
- 0, если подстрока не была найдена.
Пример
Дано ClickHouse
в формате UTF-8, найти позиции c
(\x63
) и h
(\x68
).
Запрос:
Результат:
multiSearchFirstPosition
Как position
, но возвращает самый левый индекс в строке haystack
, который соответствует любому из нескольких строк needle
.
Функции multiSearchFirstPositionCaseInsensitive
, multiSearchFirstPositionUTF8
и multiSearchFirstPositionCaseInsensitiveUTF8
предоставляют варианты без учета регистра и/или UTF-8 для этой функции.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- Левый смещение в строке
haystack
, которое соответствует любому из нескольких строкneedle
. - 0, если совпадений не было.
Пример
Запрос:
Результат:
multiSearchFirstPositionCaseInsensitive
Как multiSearchFirstPosition
, но игнорирует регистр.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— массив подстрок, которые нужно найти. Array.
Возвращаемое значение
- Левый смещение в строке
haystack
, которое соответствует любому из нескольких строкneedle
. - 0, если совпадений не было.
Пример
Запрос:
Результат:
multiSearchFirstPositionUTF8
Как multiSearchFirstPosition
, но предполагает, что haystack
и needle
являются строками UTF-8.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— массив подстрок в кодировке UTF-8, которые нужно найти. Array.
Возвращаемое значение
- Левый смещение в строке
haystack
, которое соответствует любому из нескольких строкneedle
. - 0, если совпадений не было.
Пример
Найти левое смещение в строке UTF-8 hello world
, которое соответствует любому из заданных needle
.
Запрос:
Результат:
multiSearchFirstPositionCaseInsensitiveUTF8
Как multiSearchFirstPosition
, но предполагает, что haystack
и needle
являются строками в кодировке UTF-8 и игнорирует регистр.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— массив строк в кодировке UTF-8, которые нужно найти. Array.
Возвращаемое значение
- Левый смещение в строке
haystack
, которое соответствует любому из нескольких строкneedle
, игнорируя регистр. - 0, если совпадений не было.
Пример
Найти левое смещение в строке UTF-8 HELLO WORLD
, которое соответствует любому из заданных needle
.
Запрос:
Результат:
multiSearchFirstIndex
Возвращает индекс i
(начиная с 1) первого найденного needle<sub>i</sub>
в строке haystack
и 0 в противном случае.
Функции multiSearchFirstIndexCaseInsensitive
, multiSearchFirstIndexUTF8
и multiSearchFirstIndexCaseInsensitiveUTF8
предоставляют варианты без учета регистра и/или UTF-8 для этой функции.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- индекс (начиная с 1) первого найденного
needle
. В противном случае 0, если совпадений не было. UInt8.
Пример
Запрос:
Результат:
multiSearchFirstIndexCaseInsensitive
Возвращает индекс i
(начиная с 1) первого найденного needle<sub>i</sub>
в строке haystack
и 0 в противном случае. Игнорирует регистр.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- индекс (начиная с 1) первого найденного
needle
. В противном случае 0, если совпадений не было. UInt8.
Пример
Запрос:
Результат:
multiSearchFirstIndexUTF8
Возвращает индекс i
(начиная с 1) первого найденного needle<sub>i</sub>
в строке haystack
и 0 в противном случае. Предполагает, что строки haystack
и needle
представлены в кодировке UTF-8.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— массив подстрок в кодировке UTF-8, которые нужно найти. Array.
Возвращаемое значение
- индекс (начиная с 1) первого найденного
needle
. В противном случае 0, если совпадений не было. UInt8.
Пример
Дано Hello World
в формате UTF-8, найдите индекс первого вхождения строк UTF-8 Hello
и World
.
Запрос:
Результат:
multiSearchFirstIndexCaseInsensitiveUTF8
Возвращает индекс i
(начиная с 1) первого найденного needle<sub>i</sub>
в строке haystack
и 0 в противном случае. Предполагает, что строки haystack
и needle
представлены в кодировке UTF-8. Игнорирует регистр.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— массив подстрок в кодировке UTF-8, которые нужно найти. Array.
Возвращаемое значение
- индекс (начиная с 1) первого найденного
needle
. В противном случае 0, если совпадений не было. UInt8.
Пример
Дано HELLO WORLD
в формате UTF-8, найдите индекс первого вхождения строк UTF-8 hello
и world
.
Запрос:
Результат:
multiSearchAny
Возвращает 1, если хотя бы одна из строк needle<sub>i</sub>
совпадает со строкой haystack
, и 0 в противном случае.
Функции multiSearchAnyCaseInsensitive
, multiSearchAnyUTF8
и multiSearchAnyCaseInsensitiveUTF8
предоставляют варианты без учета регистра и/или UTF-8 для этой функции.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- 1, если хотя бы одно совпадение было.
- 0, если совпадений не было.
Пример
Запрос:
Результат:
multiSearchAnyCaseInsensitive
Как multiSearchAny, но игнорирует регистр.
Синтаксис
Параметры
haystack
— строка, в которой выполняется поиск. String.needle
— подстроки, которые необходимо найти. Array.
Возвращаемое значение
- 1, если хотя бы одно совпадение было, игнорируя регистр.
- 0, если совпадений не было.
Пример
Запрос:
Результат:
multiSearchAnyUTF8
Как multiSearchAny, но предполагает, что строки haystack
и подстроки needle
представлены в кодировке UTF-8.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— подстроки в кодировке UTF-8, которые необходимо найти. Array.
Возвращаемое значение
- 1, если хотя бы одно совпадение было.
- 0, если совпадений не было.
Пример
Дано ClickHouse
в формате UTF-8, проверить, есть ли буквы C
(\x43
) или H
(\x48
) в слове.
Запрос:
Результат:
multiSearchAnyCaseInsensitiveUTF8
Как multiSearchAnyUTF8, но игнорирует регистр.
Синтаксис
Параметры
haystack
— строка в кодировке UTF-8, в которой выполняется поиск. String.needle
— подстроки в кодировке UTF-8, которые необходимо найти. Array.
Возвращаемое значение
- 1, если хотя бы одно совпадение было, игнорируя регистр.
- 0, если совпадений не было.
Пример
Дано ClickHouse
в формате UTF-8, проверить, есть ли буква h
(\x68
) в слове, игнорируя регистр.
Запрос:
Результат:
match
Возвращает, совпадает ли строка haystack
с регулярным выражением pattern
в синтаксисе регулярных выражений re2.
Сопоставление осуществляется на основе UTF-8, например, .
соответствует кодовой точке Unicode ¥
, которая представлена в кодировке UTF-8 с использованием двух байтов. Регулярное выражение не должно содержать нулевых байтов. Если haystack
или pattern
не являются допустимым UTF-8, поведение не определено.
В отличие от стандартного поведения re2, .
соответствует разрывам строк. Чтобы отключить это, добавьте в начало шаблона (?-s)
.
Если вы хотите искать подстроки в строке, вы можете использовать функции like или position вместо этого - они работают намного быстрее, чем эта функция.
Синтаксис
Псевдоним: haystack REGEXP pattern operator
multiMatchAny
Как match
, но возвращает 1, если хотя бы одно из шаблонов совпадает, и 0 в противном случае.
Функции семейства multi[Fuzzy]Match*()
используют библиотеку (Vectorscan)[https://github.com/VectorCamp/vectorscan]. Таким образом, они активируются только если ClickHouse скомпилирован с поддержкой vectorscan.
Чтобы отключить все функции, использующие hyperscan, используйте настройку SET allow_hyperscan = 0;
.
Из-за ограничений vectorscan длина строки haystack
должна быть менее 232 байт.
Hyperscan в целом уязвим для атак отказа в обслуживании с использованием регулярных выражений (ReDoS) (например, см. (здесь)[https://www.usenix.org/conference/usenixsecurity22/presentation/turonova], (здесь)[https://doi.org/10.1007/s10664-021-10033-1] и (здесь)[https://doi.org/10.1145/3236024.3236027]). Пользователи должны внимательно проверять предоставленные шаблоны.
Если вы хотите искать несколько подстрок в строке, вы можете использовать функцию multiSearchAny вместо этого - она работает намного быстрее, чем эта функция.
Синтаксис
multiMatchAnyIndex
Как multiMatchAny
, но возвращает любой индекс, который совпадает с haystack
.
Синтаксис
multiMatchAllIndices
Как multiMatchAny
, но возвращает массив всех индексов, совпадающих с haystack
, в произвольном порядке.
Синтаксис
multiFuzzyMatchAny
Как multiMatchAny
, но возвращает 1, если любой шаблон совпадает с haystack
в пределах постоянного расстояния редактирования. Эта функция зависит от экспериментальной функции библиотеки hyperscan и может быть медленной для некоторых крайних случаев. Производительность зависит от значения расстояния редактирования и используемых шаблонов, но она всегда менее эффективна, чем у неразмытых вариантов.
Функция multiFuzzyMatch*()
не поддерживает регулярные выражения UTF-8 (он трактует их как последовательность байтов) из-за ограничений hyperscan.
Синтаксис
multiFuzzyMatchAnyIndex
Как multiFuzzyMatchAny
, но возвращает любой индекс, который совпадает с haystack
в пределах постоянного расстояния редактирования.
Синтаксис
multiFuzzyMatchAllIndices
Как multiFuzzyMatchAny
, но возвращает массив всех индексов в произвольном порядке, которые совпадают с haystack
в пределах постоянного расстояния редактирования.
Синтаксис
extract
Возвращает первое совпадение регулярного выражения в строке. Если haystack
не совпадает с регулярным выражением pattern
, возвращается пустая строка.
Если регулярное выражение имеет группы захвата, функция сопоставляет входную строку с первой группой захвата.
Синтаксис
Аргументы
haystack
— входная строка. String.pattern
— регулярное выражение в синтаксисе регулярных выражений re2.
Возвращаемое значение
- Первое совпадение регулярного выражения в строке
haystack
. String.
Пример
Запрос:
Результат:
extractAll
Возвращает массив всех совпадений регулярного выражения в строке. Если haystack
не совпадает с регулярным выражением pattern
, возвращается пустой массив.
Поведение по отношению к подшаблонам такое же, как в функции extract
.
Синтаксис
Аргументы
haystack
— входная строка. String.pattern
— регулярное выражение в синтаксисе регулярных выражений re2.
Возвращаемое значение
Пример
Запрос:
Результат:
extractAllGroupsHorizontal
Сопоставляет все группы строки haystack
с помощью регулярного выражения pattern
. Возвращает массив массивов, где первый массив включает все фрагменты, соответствующие первой группе, второй массив - соответствующие второй группе и т. д.
Эта функция медленнее, чем extractAllGroupsVertical.
Синтаксис
Аргументы
haystack
— входная строка. String.pattern
— регулярное выражение в синтаксисе регулярных выражений re2. Должен содержать группы, каждая группа заключена в круглые скобки. Еслиpattern
не содержит групп, выбрасывается исключение. String.
Возвращаемое значение
- Массив массивов совпадений. Array.
Если haystack
не совпадает с регулярным выражением pattern
, возвращается массив пустых массивов.
Пример
Результат:
extractGroups
Сопоставляет все группы заданной входной строки с данным регулярным выражением, возвращает массив массивов совпадений.
Синтаксис
Аргументы
haystack
— входная строка. String.pattern
— регулярное выражение в синтаксисе регулярных выражений re2. Должен содержать группы, каждая группа заключена в круглые скобки. Еслиpattern
не содержит групп, выбрасывается исключение. String.
Возвращаемое значение
- Массив массивов совпадений. Array.
Пример
Результат:
extractAllGroupsVertical
Сопоставляет все группы строки haystack
с помощью регулярного выражения pattern
. Возвращает массив массивов, где каждый массив включает в себя совпадающие фрагменты из каждой группы. Фрагменты группируются в порядке их появления в haystack
.
Синтаксис
Аргументы
haystack
— входная строка. String.pattern
— регулярное выражение в синтаксисе регулярных выражений re2. Должен содержать группы, каждая группа заключена в круглые скобки. Еслиpattern
не содержит групп, выбрасывается исключение. String.
Возвращаемое значение
- Массив массивов совпадений. Array.
Если haystack
не совпадает с регулярным выражением pattern
, возвращается пустой массив.
Пример
Результат:
like
Возвращает, соответствует ли строка haystack
выражению LIKE pattern
.
Выражение LIKE может содержать обычные символы и следующие метасимволы:
%
указывает на произвольное количество произвольных символов (включая ноль символов)._
указывает на один произвольный символ.\
используется для экранирования литералов%
,_
и\
.
Сопоставление основано на UTF-8, например, _
соответствует кодовой точке Unicode ¥
, которая представлена в UTF-8 с использованием двух байтов.
Если haystack или выражение LIKE не являются допустимым UTF-8, поведение будет неопределенным.
Автоматическая нормализация Unicode не выполняется, вы можете использовать функции normalizeUTF8*() для этого.
Чтобы сопоставить с литералом %
, _
и \
(которые являются метасимволами LIKE), добавьте перед ними обратный слеш: \%
, \_
и \\
.
Обратный слеш теряет свое специальное значение (т.е. интерпретируется буквально), если он предшествует символу, отличному от %
, _
или \
.
Обратите внимание, что ClickHouse требует, чтобы обратные слэши в строках также были экранированы, поэтому вам на самом деле нужно будет написать \\%
, \\_
и \\\\
.
Для выражений LIKE вида %needle%
функция работает так же быстро, как и функция position
.
Все другие выражения LIKE внутренне преобразуются в регулярное выражение и выполняются с производительностью, аналогичной функции match
.
Синтаксис
Псевдоним: haystack LIKE pattern
(оператор)
notLike
То же самое, что и like
, но отрицает результат.
Псевдоним: haystack NOT LIKE pattern
(оператор)
ilike
То же самое, что и like
, но выполняет поиск без учета регистра.
Псевдоним: haystack ILIKE pattern
(оператор)
notILike
То же самое, что и ilike
, но отрицает результат.
Псевдоним: haystack NOT ILIKE pattern
(оператор)
ngramDistance
Вычисляет расстояние 4-грам между строкой haystack
и строкой needle
. Для этого он подсчитывает симметричную разницу между двумя мультисетами 4-грам и нормализует ее по сумме их кардинальностей. Возвращает Float32 от 0 до 1. Чем меньше результат, тем более похожи строки друг на друга.
Функции ngramDistanceCaseInsensitive
, ngramDistanceUTF8
, ngramDistanceCaseInsensitiveUTF8
предоставляют нечувствительные к регистру и/или UTF-8 варианты этой функции.
Синтаксис
Параметры
haystack
: первая строка для сравнения. Строковый литералneedle
: вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее сходство между двумя строками. Float32
Детали реализации
Эта функция вызывает исключение, если постоянные аргументы needle
или haystack
больше 32Kb по размеру. Если любые непостоянные аргументы haystack
или needle
больше 32Kb по размеру, то расстояние всегда равно 1.
Примеры
Чем более похожи две строки друг на друга, тем ближе результат к 0 (идентичные).
Запрос:
Результат:
Чем менее похожи две строки друг на друга, тем больше результат.
Запрос:
Результат:
ngramDistanceCaseInsensitive
Предоставляет вариант ngramDistance без учета регистра.
Синтаксис
Параметры
haystack
: первая строка для сравнения. Строковый литералneedle
: вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее сходство между двумя строками. Float32
Примеры
С ngramDistance различия в регистре повлияют на значение аналогии:
Запрос:
Результат:
С ngramDistanceCaseInsensitive регистр игнорируется, поэтому две идентичные строки, отличающиеся только регистром, теперь будут возвращать низкое значение сходства:
Запрос:
Результат:
ngramDistanceUTF8
Предоставляет UTF-8 вариант ngramDistance. Предполагается, что строки needle
и haystack
закодированы в UTF-8.
Синтаксис
Параметры
haystack
: первая строка для сравнения, закодированная в UTF-8. Строковый литералneedle
: вторая строка для сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее сходство между двумя строками. Float32
Пример
Запрос:
Результат:
ngramDistanceCaseInsensitiveUTF8
Предоставляет вариант без учета регистра ngramDistanceUTF8.
Синтаксис
Параметры
haystack
: первая строка для сравнения, закодированная в UTF-8. Строковый литералneedle
: вторая строка для сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее сходство между двумя строками. Float32
Пример
Запрос:
Результат:
ngramSearch
Как ngramDistance
, но вычисляет нессиметричную разницу между строкой needle
и строкой haystack
, т.е. количество n-грамм из needle
минус общее количество n-грамм, нормализованное по количеству n-грамм needle
. Возвращает Float32 от 0 до 1. Чем больше результат, тем более вероятно, что needle
находится в haystack
. Эта функция полезна для нечеткого поиска строк. Также смотрите функцию soundex
.
Функции ngramSearchCaseInsensitive
, ngramSearchUTF8
, ngramSearchCaseInsensitiveUTF8
предоставляют нечувствительные к регистру и/или UTF-8 варианты этой функции.
Синтаксис
Параметры
haystack
: первая строка для сравнения. Строковый литералneedle
: вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность наличия
needle
вhaystack
. Float32
Детали реализации
UTF-8 варианты используют 3-граммное расстояние. Это не совершенно справедливые n-граммные расстояния. Мы используем 2-байтовые хеши для хеширования n-грамм, а затем вычисляем (нессиметричную) разницу между этими хеш-таблицами – могут произойти коллизии. В формате UTF-8 без учета регистра мы не используем справедливую функцию tolower
– мы обнуляем 5-й бит (начиная с нуля) каждого байта кодовой точки и первый бит нулевого байта, если байтов больше одного – это работает для латинских и в основном для всех кириллических букв.
Пример
Запрос:
Результат:
ngramSearchCaseInsensitive
Предоставляет вариант ngramSearch без учета регистра.
Синтаксис
Параметры
haystack
: первая строка для сравнения. Строковый литералneedle
: вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность наличия
needle
вhaystack
. Float32
Чем больше результат, тем более вероятно, что needle
находится в haystack
.
Пример
Запрос:
Результат:
ngramSearchUTF8
Предоставляет UTF-8 вариант ngramSearch, в котором needle
и haystack
предполагаются закодированными в UTF-8.
Синтаксис
Параметры
haystack
: первая строка для сравнения, закодированная в UTF-8. Строковый литералneedle
: вторая строка для сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность наличия
needle
вhaystack
. Float32
Чем больше результат, тем более вероятно, что needle
находится в haystack
.
Пример
Запрос:
Результат:
ngramSearchCaseInsensitiveUTF8
Предоставляет вариант без учета регистра ngramSearchUTF8, в котором needle
и haystack
.
Синтаксис
Параметры
haystack
: первая строка для сравнения, закодированная в UTF-8. Строковый литералneedle
: вторая строка для сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность наличия
needle
вhaystack
. Float32
Чем больше результат, тем более вероятно, что needle
находится в haystack
.
Пример
Запрос:
Результат:
countSubstrings
Возвращает, сколько раз подстрока needle
встречается в строке haystack
.
Функции countSubstringsCaseInsensitive
и countSubstringsCaseInsensitiveUTF8
предоставляют нечувствительные к регистру и чувствительные к регистру + UTF-8 варианты этой функции соответственно.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Строка или Enum.needle
— подстрока для поиска. Строка.start_pos
— позиция (индекс с 1), с которой начинается поиск вhaystack
. UInt. Необязательный.
Возвращаемое значение
- Количество вхождений. UInt64.
Примеры
Результат:
Пример с аргументом start_pos
:
Результат:
countSubstringsCaseInsensitive
Возвращает, сколько раз подстрока needle
встречается в строке haystack
. Игнорирует регистр.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Строка или Enum.needle
— подстрока для поиска. Строка.start_pos
— позиция (индекс с 1), с которой начинается поиск вhaystack
. UInt. Необязательный.
Возвращаемое значение
- Количество вхождений. UInt64.
Примеры
Запрос:
Результат:
Пример с аргументом start_pos
:
Запрос:
Результат:
countSubstringsCaseInsensitiveUTF8
Возвращает, сколько раз подстрока needle
встречается в строке haystack
. Игнорирует регистр и предполагает, что haystack
является строкой UTF-8.
Синтаксис
Аргументы
haystack
— UTF-8 строка, в которой выполняется поиск. Строка или Enum.needle
— подстрока для поиска. Строка.start_pos
— позиция (индекс с 1), с которой начинается поиск вhaystack
. UInt. Необязательный.
Возвращаемое значение
- Количество вхождений. UInt64.
Примеры
Запрос:
Результат:
Пример с аргументом start_pos
:
Запрос:
Результат:
countMatches
Возвращает количество совпадений регулярного выражения для pattern
в haystack
.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Строка.pattern
— регулярное выражение с синтаксисом регулярных выражений re2. Строка.
Возвращаемое значение
- Количество совпадений. UInt64.
Примеры
Результат:
Результат:
countMatchesCaseInsensitive
Возвращает количество совпадений регулярного выражения для шаблона в haystack, как и countMatches
, но совпадения игнорируют регистр.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Строка.pattern
— регулярное выражение с синтаксисом регулярных выражений re2. Строка.
Возвращаемое значение
- Количество совпадений. UInt64.
Примеры
Запрос:
Результат:
regexpExtract
Извлекает первую строку в haystack
, которая соответствует паттерну regexp и соответствует индексу группы regex.
Синтаксис
Псевдоним: REGEXP_EXTRACT(haystack, pattern[, index])
.
Аргументы
haystack
— строка, в которой будет совпадать шаблон regexp. Строка.pattern
— строка, регулярное выражение, должно быть постоянным. Строка.index
– целое число больше или равно 0, по умолчанию 1. Оно представляет, какую группу regex извлечь. UInt или Int. Необязательный.
Возвращаемое значение
pattern
может содержать несколько групп regexp, index
указывает, какую группу regex извлечь. Индекс 0 означает совпадение с полным регулярным выражением. Строка.
Примеры
Результат:
hasSubsequence
Возвращает 1, если needle
является подпоследовательностью haystack
, или 0 в противном случае.
Подпоследовательность строки - это последовательность, которая может быть получена из данной строки, удаляя ноль или более элементов, не изменяя порядок оставшихся элементов.
Синтаксис
Аргументы
Возвращаемое значение
- 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.
Примеры
Запрос:
Результат:
hasSubsequenceCaseInsensitive
Как hasSubsequence, но ищет без учета регистра.
Синтаксис
Аргументы
Возвращаемое значение
- 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.
Примеры
Запрос:
Результат:
hasSubsequenceUTF8
Как hasSubsequence, но предполагает, что haystack
и needle
являются закодированными в UTF-8 строками.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Закодированная в UTF-8 строка.needle
— подстрока для поиска. Закодированная в UTF-8 строка.
Возвращаемое значение
- 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.
Пример
Запрос:
Результат:
hasSubsequenceCaseInsensitiveUTF8
Как hasSubsequenceUTF8, но ищет без учета регистра.
Синтаксис
Аргументы
haystack
— строка, в которой выполняется поиск. Закодированная в UTF-8 строка.needle
— подстрока для поиска. Закодированная в UTF-8 строка.
Возвращаемое значение
- 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.
Примеры
Запрос:
Результат:
hasToken
Возвращает 1, если данный токен присутствует в haystack, и 0 в противном случае.
Синтаксис
Параметры
haystack
: строка, в которой выполняется поиск. Строка или Enum.token
: максимальная длина подстроки между двумя неалфавитными ASCII символами (или границами haystack).
Возвращаемое значение
- 1, если токен присутствует в haystack, 0 в противном случае. UInt8.
Детали реализации
Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.
Пример
Запрос:
hasTokenOrNull
Возвращает 1, если токен присутствует, 0 если не присутствует, и null, если токен имеет некорректный формат.
Синтаксис
Параметры
haystack
: строка, в которой выполняется поиск. Строка или Enum.token
: максимальная длина подстроки между двумя неалфавитными ASCII символами (или границами haystack).
Возвращаемое значение
- 1, если токен присутствует в haystack, 0 если он не присутствует, и null, если токен имеет некорректный формат.
Детали реализации
Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.
Пример
Где hasToken
вызвал бы ошибку для некорректного токена, hasTokenOrNull
возвращает null
для некорректного токена.
Запрос:
hasTokenCaseInsensitive
Возвращает 1, если данный токен присутствует в haystack, 0 в противном случае. Игнорирует регистр.
Синтаксис
Параметры
haystack
: строка, в которой выполняется поиск. Строка или Enum.token
: максимальная длина подстроки между двумя неалфавитными ASCII символами (или границами haystack).
Возвращаемое значение
- 1, если токен присутствует в haystack, 0 в противном случае. UInt8.
Детали реализации
Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.
Пример
Запрос:
hasTokenCaseInsensitiveOrNull
Возвращает 1, если токен присутствует в haystack, 0 в противном случае. Игнорирует регистр и возвращает null, если токен имеет некорректный формат.
Синтаксис
Параметры
haystack
: строка, в которой выполняется поиск. Строка или Enum.token
: максимальная длина подстроки между двумя неалфавитными ASCII символами (или границами haystack).
Возвращаемое значение
- 1, если токен присутствует в haystack, 0 если токен не присутствует, в противном случае
null
, если токен имеет некорректный формат. UInt8.
Детали реализации
Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.
Пример
Где hasTokenCaseInsensitive
вызвал бы ошибку для некорректного токена, hasTokenCaseInsensitiveOrNull
возвращает null
для некорректного токена.
Запрос: