Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دوال البحث في السلاسل

تُجري جميع الدوال في هذا القسم البحث بشكل حساس لحالة الأحرف افتراضيًا. وعادةً ما تتوفر صيغ دوال منفصلة للبحث غير الحساس لحالة الأحرف.

تفترض الدوال في هذا القسم أيضًا أن السلسلة التي يُبحث فيها (ويُشار إليها في هذا القسم باسم haystack) وسلسلة البحث (ويُشار إليها في هذا القسم باسم needle) نصّان مرمَّزان بترميز أحادي البايت. وإذا لم يتحقق هذا الافتراض، فلا يُطرَح أي استثناء وتكون النتائج غير معرّفة. وعادةً ما تتوفر صيغ دوال منفصلة للبحث في السلاسل المرمَّزة بـ UTF-8. وبالمثل، إذا استُخدمت صيغة دالة لـ UTF-8 وكانت سلاسل الإدخال ليست نصًا مرمَّزًا بـ UTF-8، فلا يُطرَح أي استثناء وتكون النتائج غير معرّفة. لاحظ أيضًا أنه لا يُجرى أي تطبيع تلقائي لـ Unicode، ولكن يمكنك استخدام دوال normalizeUTF8*() لهذا الغرض.

يُشرح كلٌّ من الدوال العامة للسلاسل ودوال الاستبدال في السلاسل بشكل منفصل.

countMatches

أُضيف في: v21.1.0

يعيد عدد مرات تطابق تعبير نمطي داخل سلسلة نصية.

البنية

countMatches(haystack, pattern)

الوسيطات

  • haystack — السلسلة النصية المطلوب البحث فيها. String
  • pattern — نمط التعبير النمطي. String

القيمة المعادة

يعيد عدد المطابقات التي عُثر عليها. UInt64

أمثلة

عدّ تسلسلات الأرقام

SELECT countMatches('hello 123 world 456 test', '[0-9]+')
┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐
│                                                  2 │
└────────────────────────────────────────────────────┘

countMatchesCaseInsensitive

استُحدث في: v21.1.0

مشابه لـ countMatches، لكنه يُجري مطابقة تتجاهل حالة الأحرف.

البنية

countMatchesCaseInsensitive(haystack, pattern)

الوسيطات

  • haystack — السلسلة النصية المراد البحث فيها. String
  • pattern — نمط تعبير نمطي. const String

القيمة المعادة

يعيد عدد المطابقات التي تم العثور عليها. UInt64

أمثلة

العدّ دون تمييز بين الأحرف الكبيرة والصغيرة

SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello')
┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐
│                                                         2 │
└───────────────────────────────────────────────────────────┘

countSubstrings

أُضيف في: v21.1.0

يُرجع عدد مرات ظهور السلسلة الفرعية needle ضمن السلسلة haystack.

البنية

countSubstrings(haystack, needle[, start_pos])

المعاملات

  • haystack — السلسلة التي يُجرى البحث فيها. String أو Enum. - needle — السلسلة الفرعية المطلوب البحث عنها. String. - start_pos — الموضع (بدءًا من 1) في haystack الذي يبدأ منه البحث. UInt. اختياري.

القيمة المُعادة

عدد مرات الظهور. UInt64

أمثلة

مثال على الاستخدام

SELECT countSubstrings('aaaa', 'aa');
┌─countSubstrings('aaaa', 'aa')─┐
│                             2 │
└───────────────────────────────┘

باستخدام الوسيط start_pos

SELECT countSubstrings('abc___abc', 'abc', 4);
┌─countSubstrings('abc___abc', 'abc', 4)─┐
│                                      1 │
└────────────────────────────────────────┘

countSubstringsCaseInsensitive

قُدِّمت في: v21.1.0

مثل countSubstrings، لكنه يحسب بغض النظر عن حالة الأحرف.

الصياغة

countSubstringsCaseInsensitive(haystack, needle[, start_pos])

الوسائط

  • haystack — السلسلة التي يُجرى فيها البحث. String أو Enum
  • needle — السلسلة الفرعية المطلوب البحث عنها. String
  • start_pos — اختياري. الموضع (بدءًا من 1) في haystack الذي يبدأ منه البحث. UInt*

القيمة المُعادة

يُرجع عدد مرات ظهور needle في haystack. UInt64

أمثلة

مثال على الاستخدام

SELECT countSubstringsCaseInsensitive('AAAA', 'aa');
┌─countSubstringsCaseInsensitive('AAAA', 'aa')─┐
│                                            2 │
└──────────────────────────────────────────────┘

باستخدام الوسيطة start_pos

SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4);
┌─countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4)─┐
│                                                           2 │
└─────────────────────────────────────────────────────────────┘

countSubstringsCaseInsensitiveUTF8

أُضيفت في: v21.1.0

مشابهة لـ countSubstrings، لكنها تحسب بدون حساسية لحالة الأحرف، وتفترض أن haystack عبارة عن سلسلة UTF-8.

الصيغة

countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos])

المعاملات

  • haystack — سلسلة UTF-8 يُجرى البحث فيها. String أو Enum
  • needle — سلسلة فرعية يُبحث عنها. String
  • start_pos — اختياري. الموضع (ابتداءً من 1) في haystack الذي يبدأ منه البحث. UInt*

القيمة المُعادة

يعيد عدد مرات ظهور needle في haystack. UInt64

أمثلة

مثال على الاستخدام

SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА');
┌─countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА')─┐
│                                                                  4 │
└────────────────────────────────────────────────────────────────────┘

مع الوسيطة start_pos

SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13);
┌─countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13)─┐
│                                                                      2 │
└────────────────────────────────────────────────────────────────────────┘

extract

متوفر منذ: v1.1.0

يستخرج أول تطابق لتعبير نمطي في سلسلة نصية. إذا لم يطابق 'haystack' ‏'pattern'، فستُعاد سلسلة فارغة.

تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على البنية المدعومة.

إذا كان التعبير النمطي يحتوي على مجموعات ملتقطة (أنماطًا فرعية)، فستطابق الدالة سلسلة الإدخال مع أول مجموعة ملتقطة.

البنية

extract(haystack, pattern)

الوسيطات

  • haystack — السلسلة المراد الاستخراج منها. String
  • pattern — تعبير نمطي، يحتوي عادةً على مجموعة التقاط. const String

القيمة المعادة

يعيد الجزء المستخرج على هيئة سلسلة. String

أمثلة

استخراج النطاق من البريد الإلكتروني

SELECT extract('test@clickhouse.com', '.*@(.*)$')
┌─extract('test@clickhouse.com', '.*@(.*)$')─┐
│ clickhouse.com                             │
└────────────────────────────────────────────┘

إذا لم توجد مطابقة، تُعاد سلسلة فارغة

SELECT extract('test@clickhouse.com', 'no_match')
┌─extract('test@clickhouse.com', 'no_match')─┐
│                                            │
└────────────────────────────────────────────┘

extractAll

أُضيفت في: v1.1.0

مثل extract، لكنها تُرجِع مصفوفة تضم جميع مطابقات التعبير النمطي في سلسلة نصية. إذا لم يطابق 'haystack' التعبير النمطي 'pattern'، فستُرجَع مصفوفة فارغة.

إذا كان التعبير النمطي يحتوي على مجموعات ملتقطة (أنماط فرعية)، فستُطابِق الدالة سلسلة الإدخال مع أول مجموعة ملتقطة.

البنية

extractAll(haystack, pattern)

الوسيطات

  • haystack — السلسلة التي تُستخرج منها المقاطع. String
  • pattern — تعبير نمطي، وقد يتضمن اختياريًا مجموعات التقاط. const String

القيمة المعادة

يعيد مصفوفة من المقاطع المستخرجة. Array(String)

أمثلة

استخراج جميع الأرقام

SELECT extractAll('hello 123 world 456', '[0-9]+')
┌─extractAll('hello 123 world 456', '[0-9]+')─┐
│ ['123','456']                               │
└─────────────────────────────────────────────┘

الاستخراج باستخدام مجموعة الالتقاط

SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')
┌─extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')─┐
│ ['test','user']                                                    │
└────────────────────────────────────────────────────────────────────┘

extractAllGroupsHorizontal

أُضيفت في: v20.5.0

تطابق جميع مجموعات السلسلة النصية باستخدام التعبير النمطي الموفَّر، وتُرجع مصفوفة من المصفوفات، بحيث تحتوي كل مصفوفة على جميع القيم الملتقطة من المجموعة الملتقِطة نفسها، مرتبة حسب رقم المجموعة.

البنية

extractAllGroupsHorizontal(s, regexp)

الوسيطات

القيمة المعادة

تعيد مصفوفة من المصفوفات، حيث تحتوي كل مصفوفة داخلية على جميع القيم الملتقطة من مجموعة ملتقطة واحدة عبر كل المطابقات. تحتوي المصفوفة الداخلية الأولى على جميع القيم الملتقطة من المجموعة 1، والثانية من المجموعة 2، وهكذا. وإذا لم يتم العثور على أي مطابقات، فستُعاد مصفوفة فارغة. Array(Array(String))

أمثلة

مثال على الاستخدام

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']]

extractGroups

أُضيفت في: v20.5.0

يستخرج مجموعات الالتقاط من أول سلسلة فرعية يطابقها تعبير نمطي. ولاستخراج المجموعات من جميع المطابقات، استخدم extractAllGroupsHorizontal أو extractAllGroupsVertical.

الصيغة

extractGroups(s, regexp)

المعاملات

  • s — سلسلة الإدخال المطلوب الاستخراج منها. String أو FixedString
  • regexp — تعبير نمطي. يجب أن يحتوي على مجموعة ملتقطة واحدة على الأقل. ثابت. const String أو const FixedString

القيمة المُعادة

إذا وُجد تطابق مع التعبير النمطي، فستُعاد مصفوفة تحتوي على المجموعات الملتقطة (1 إلى N، حيث إن N هو عدد المجموعات الملتقطة في regexp) لأول تطابق. وإذا لم يوجد تطابق، فستُعاد مصفوفة فارغة. Array(String)

أمثلة

مثال على الاستخدام

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
['Server','nginx']

hasAllTokens

أُضيف في: v25.10.0

مثل hasAnyTokens، لكنه يُرجِع 1 إذا كانت جميع الرموز في السلسلة أو المصفوفة needle تطابق السلسلة input، ويُرجِع 0 خلاف ذلك. إذا كان input عمودًا، فإنه يُرجِع جميع الصفوف التي تستوفي هذا الشرط.

قبل البحث، تُجزِّئ الدالة إلى رموز:

  • الوسيط input (دائمًا)، و
  • الوسيط needle (إذا أُعطي على هيئة String) باستخدام مُجزِّئ الرموز المحدد للفهرس النصي. إذا لم يكن للعمود فهرس نصي معرّف، فسيُستخدم بدلًا منه مُجزِّئ الرموز splitByNonAlpha. إذا كان الوسيط needle من النوع Array(String)، فسيُعامل كل عنصر في المصفوفة على أنه رمز — ولا تُجرى أي عملية إضافية لتجزئته إلى رموز. إذا كان الفهرس النصي يحتوي على تعبير معالج مسبق مُعدّ، فسيُطبَّق المعالج المسبق على needle (إذا أُعطي كـ String) قبل تجزئته إلى رموز. إذا كان الفهرس النصي يحتوي على تعبير معالج لاحق مُعدّ، فسيُطبَّق المعالج اللاحق على رموز needle ورموز input (أي على كليهما بعد التجزئة إلى رموز).

تُتجاهل الرموز المكررة. على سبيل المثال، تُعامل needles = ['ClickHouse', 'ClickHouse'] بنفس طريقة المعاملة مثل ['ClickHouse'].

البنية

hasAllTokens(input, needles[, tokenizer])

الأسماء المستعارة: hasAllToken

الوسائط

القيمة المُعادة

تُعيد 1 إذا تطابقت جميع العينات. وإلا فتُعيد 0. UInt8

أمثلة

استخدام أساسي مع سلسلة البحث

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAllTokens(msg, 'a\\d()');
┌─count()─┐
│       1 │
└─────────┘

حدّد عبارات البحث المطلوب البحث عنها كما هي AS-IS (من دون تجزئة إلى رموز) في مصفوفة

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAllTokens(msg, ['a', 'd']);
┌─count()─┐
│       1 │
└─────────┘

أنشئ عبارات البحث باستخدام الدالة tokens

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));
┌─count()─┐
│       1 │
└─────────┘

استخدم مُجزِّئًا مخصّصًا باستخدام الوسيط الثالث

SELECT hasAllTokens('abcdef', 'abc', 'ngrams(3)');
┌─hasAllTokens('abcdef', 'abc', 'ngrams(3)')─┐
│                                          1 │
└────────────────────────────────────────────┘

أمثلة استخدام الأعمدة من نوع Array وMap

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

مثال على عمود من نوع Array

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse');
┌─count()─┐
│       1 │
└─────────┘

مثال باستخدام mapKeys

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']);
┌─count()─┐
│       1 │
└─────────┘

مثال على mapValues

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);
┌─count()─┐
│       0 │
└─────────┘

hasAnyTokens

أُضيف في: v25.10.0

يعيد 1 إذا طابق رمز واحد على الأقل في السلسلة أو المصفوفة needle السلسلة input، ويعيد 0 خلاف ذلك. وإذا كانت input عمودًا، فإنه يعيد جميع الصفوف التي تستوفي هذا الشرط.

قبل البحث، تُجزِّئ الدالة إلى رموز

  • الوسيط input (دائمًا)، و
  • الوسيط needle (إذا أُعطي على هيئة String) باستخدام مُقسِّم الرموز المحدد للفهرس النصي. وإذا لم يكن للعمود فهرس نصي معرّف، فسيُستخدم بدلًا من ذلك مُقسِّم الرموز splitByNonAlpha. وإذا كان الوسيط needle من النوع Array(String)، فسيُعامل كل عنصر في المصفوفة على أنه رمز — ولا يحدث أي تجزئة إضافية إلى رموز. وإذا كان الفهرس النصي مهيأً بتعبير معالج مسبق، فسيُطبَّق المعالج المسبق على needle (إذا أُعطي على هيئة String) قبل التجزئة إلى رموز. وإذا كان الفهرس النصي مهيأً بتعبير معالج لاحق، فسيُطبَّق المعالج اللاحق على رموز needle ورموز input (أي على كليهما بعد التجزئة إلى رموز).

تُتجاهل الرموز المكررة. فعلى سبيل المثال، ['ClickHouse', 'ClickHouse'] تُعامل بالطريقة نفسها مثل ['ClickHouse'].

البنية

hasAnyTokens(input, needles[, tokenizer])

الأسماء المستعارة: hasAnyToken

الوسيطات

القيمة المعادة

تُرجِع 1 إذا وُجدت مطابقة واحدة على الأقل، وإلا فتُرجِع 0. UInt8

أمثلة

الاستخدام الأساسي مع نمط بحث نصي

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAnyTokens(msg, 'a\\d()');
┌─count()─┐
│       3 │
└─────────┘

حدِّد سلاسل البحث المراد البحث عنها كما هي (من دون تجزئة إلى رموز) في مصفوفة

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAnyTokens(msg, ['a', 'd']);
┌─count()─┐
│       3 │
└─────────┘

توليد أنماط البحث باستخدام الدالة tokens

DROP TABLE IF EXISTS doc;

CREATE TABLE doc (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM doc WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));
┌─count()─┐
│       3 │
└─────────┘

أمثلة على استخدام أعمدة Array وMap

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

مثال على عمود من نوع Array

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse');
┌─count()─┐
│       1 │
└─────────┘

مثال على استخدام mapKeys

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']);
┌─count()─┐
│       2 │
└─────────┘

مثال باستخدام mapValues

DROP TABLE IF EXISTS log;

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);
┌─count()─┐
│       2 │
└─────────┘

hasPhrase

أُضيف في: v26.4.0

يتحقق مما إذا كان input يحتوي على جميع الرموز من phrase بترتيب متتالٍ.

قبل البحث، تُجزِّئ الدالة كلًّا من الوسيطين input وphrase إلى رموز باستخدام مُقسِّم الرموز المحدد للفهرس النصي. إذا لم يكن للعمود فهرس نصي مُعرّف، فسيُستخدم بدلًا من ذلك مُقسِّم الرموز splitByNonAlpha — ما لم يتم تمرير مُقسِّم رموز باعتباره الوسيط الثالث الاختياري. يجب أن يكون وسيط مُقسِّم الرموز واحدًا من splitByNonAlpha أو splitByString أو splitByRegexp أو ngrams أو asciiCJK أو icu. لاحظ أن splitByRegexp غير مدعوم لـ hasPhrase عندما يعرّف الفهرس النصي أيضًا معالجًا لاحقًا.

بخلاف hasToken وhasAnyTokens وhasAllTokens، تتطلب hasPhrase أن تظهر الرموز بالترتيب نفسه ومن دون أي رموز فاصلة بينها. على سبيل المثال، تُرجع hasPhrase('the quick brown fox', 'quick fox') القيمة 0 لأن "brown" تظهر بين "quick" و"fox".

البنية

hasPhrase(input, phrase[, tokenizer])

الأسماء المستعارة: matchPhrase

وسيطات الدالة

  • input — عمود الإدخال. String أو FixedString
  • phrase — العبارة المراد البحث عنها. const String
  • tokenizer — مُقسِّم الرموز المراد استخدامها. اختياري، والقيمة الافتراضية هي splitByNonAlpha. const String

القيمة المعادة

تُرجع 1 إذا عُثر على العبارة كتسلسل متتالٍ من الرموز، وإلا فتُرجع 0. UInt8

أمثلة

مطابقة العبارة

SELECT hasPhrase('the quick brown fox jumps', 'quick brown')
┌─hasPhrase('the quick brown fox jumps', 'quick brown')─┐
│                                                     1 │
└───────────────────────────────────────────────────────┘

رموز غير متتالية

SELECT hasPhrase('the quick brown fox jumps', 'quick fox')
┌─hasPhrase('the quick brown fox jumps', 'quick fox')─┐
│                                                   0 │
└─────────────────────────────────────────────────────┘

hasSubsequence

أُضيف في الإصدار: v23.7.0

يتحقق مما إذا كان needle تسلسلاً فرعيًا من haystack. التسلسل الفرعي لسلسلة نصية هو تسلسل يمكن اشتقاقه من سلسلة أخرى بحذف بعض المحارف أو دون حذف أي محرف، من دون تغيير ترتيب المحارف المتبقية.

الصياغة

hasSubsequence(haystack, needle)

الوسائط

  • haystack — السلسلة التي يُبحث فيها عن التسلسل الفرعي. String
  • needle — التسلسل الفرعي المطلوب البحث عنه. String

القيمة المعادة

يعيد 1 إذا كان needle تسلسلاً فرعياً من haystack، وإلا فيعيد 0. UInt8

أمثلة

فحص أساسي لتسلسل فرعي

SELECT hasSubsequence('Hello World', 'HlWrd')
┌─hasSubsequence('Hello World', 'HlWrd')─┐
│                                      1 │
└────────────────────────────────────────┘

تعذّر العثور على تسلسل فرعي

SELECT hasSubsequence('Hello World', 'xyz')
┌─hasSubsequence('Hello World', 'xyz')─┐
│                                    0 │
└──────────────────────────────────────┘

hasSubsequenceCaseInsensitive

استُحدثت في: v23.7.0

مثل hasSubsequence، لكنه يبحث مع تجاهل حالة الأحرف.

الصياغة

hasSubsequenceCaseInsensitive(haystack, needle)

الوسيطات

  • haystack — السلسلة النصية التي يُجرى البحث ضمنها. String
  • needle — المتتالية الجزئية المراد البحث عنها. String

القيمة المُعادة

تُرجع 1 إذا كانت needle متتالية جزئية من haystack، وإلا فتُرجع 0. UInt8

أمثلة

مثال على الاستخدام

SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG');
┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐
│                                               1 │
└─────────────────────────────────────────────────┘

hasSubsequenceCaseInsensitiveUTF8

أُضيف في: v23.7.0

مثل hasSubsequenceUTF8، لكنه يبحث دون التفريق بين الأحرف الكبيرة والصغيرة.

الصياغة

hasSubsequenceCaseInsensitiveUTF8(haystack, needle)

الوسيطات

  • haystack — سلسلة مرمّزة بـ UTF8 يُجرى البحث فيها. String
  • needle — سلسلة تسلسل فرعي مرمّزة بـ UTF8 يُبحث عنها. String

القيمة المعادة

تُرجِع 1 إذا كانت needle تسلسلاً فرعيًا من haystack، وإلا فتُرجِع 0. UInt8

أمثلة

مثال على الاستخدام

SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА');
┌─hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА')─┐
│                                                                                                        1 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘

hasSubsequenceUTF8

قُدِّمت في: v23.7.0

تشبه hasSubsequence، لكنها تفترض أن haystack و needle سلسلتان نصيتان مرمَّزتان بترميز UTF-8.

البنية

hasSubsequenceUTF8(haystack, needle)

الوسائط

  • haystack — السلسلة التي يُبحث فيها. String
  • needle — التسلسل الفرعي المراد البحث عنه. String

القيمة المُعادة

تُرجع 1 إذا كان needle تسلسلاً فرعيًا من haystack، وإلا فتُرجع 0. UInt8

أمثلة

مثال على الاستخدام

SELECT hasSubsequenceUTF8('картошка', 'кошка');
┌─hasSubsequenceUTF8('картошка', 'кошка')─┐
│                                       1 │
└─────────────────────────────────────────┘

تسلسل فرعي غير متطابق

SELECT hasSubsequenceUTF8('картошка', 'апельсин');
┌─hasSubsequenceUTF8('картошка', 'апельсин')─┐
│                                          0 │
└────────────────────────────────────────────┘

hasToken

أُضيف في: v20.1.0

يتحقق مما إذا كان token المُعطى موجودًا في النص المراد البحث فيه.

يستخدم splitByNonAlpha كمُجزِّئ للرموز، أي إن token يُعرَّف بأنه أطول تتابع فرعي ممكن من المحارف المتتالية [0-9A-Za-z_] (الأرقام، ومحارف ASCII، والشرطة السفلية).

البنية

hasToken(haystack, token)

الوسيطات

  • haystack — السلسلة النصية المطلوب البحث فيها. String
  • token — التوكن المطلوب البحث عنه. const String

القيمة المُعادة

تُرجع 1 إذا عُثر على التوكن، و0 خلاف ذلك. UInt8

أمثلة

البحث عن توكن

SELECT hasToken('clickhouse test', 'test')
┌─hasToken('clickhouse test', 'test')─┐
│                                   1 │
└─────────────────────────────────────┘

hasTokenCaseInsensitive

قُدِّمت في: v20.1.0

ينفّذ بحثًا غير حساس لحالة الأحرف عن needle داخل haystack باستخدام الفهرس tokenbf_v1.

الصياغة

hasTokenCaseInsensitive(haystack, needle)

المعاملات

  • لا شيء.

القيمة المُعادة

أمثلة

hasTokenCaseInsensitiveOrNull

أُضيفت في: v23.1.0

تُجري بحثًا عن needle داخل haystack غير حساس لحالة الأحرف باستخدام فهرس tokenbf_v1. وتُرجع NULL إذا كان needle غير صحيح التكوين.

الصيغة

hasTokenCaseInsensitiveOrNull(haystack, needle)

المعاملات

  • لا شيء.

القيمة المُعادة

أمثلة

hasTokenOrNull

قُدِّم في: v20.1.0

مثل hasToken، لكنه يُرجع NULL إذا كان الرمز غير مُشكَّل على نحو صحيح.

الصيغة

hasTokenOrNull(haystack, token)

الوسيطات

  • haystack — السلسلة المراد البحث فيها. يجب أن تكون ثابتة. String
  • token — الرمز المراد البحث عنه. const String

القيمة المُعادة

يُرجع 1 إذا عُثر على الرمز، و0 خلاف ذلك، وNULL إذا كان الرمز غير صحيح التكوين. Nullable(UInt8)

أمثلة

مثال على الاستخدام

SELECT hasTokenOrNull('apple banana cherry', 'ban ana');
┌─hasTokenOrNull('apple banana cherry', 'ban ana')─┐
│                                             ᴺᵁᴸᴸ │
└──────────────────────────────────────────────────┘

highlight

أُضيفت في: v26.4.0

تُبرز مواضع ظهور مصطلحات البحث في سلسلة نصية عبر إحاطتها بوسوم HTML.

تُجري الدالة مطابقة ASCII غير حساسة لحالة الأحرف. وإذا تداخلت عدة مصطلحات بحث أو كانت متجاورة في النص، فتُدمج الأجزاء المطابَقة في مقطع مميّز واحد.

الصياغة

highlight(haystack, needles[, open_tag, close_tag])

الوسيطات

  • haystack — النص المراد البحث فيه. String أو FixedString
  • needles — مصفوفة من عبارات البحث المراد إبرازها. const Array(String)
  • open_tag — وسم الفتح الذي يُدرج قبل كل تطابق. القيمة الافتراضية: <em>. const String
  • close_tag — وسم الإغلاق الذي يُدرج بعد كل تطابق. القيمة الافتراضية: </em>. const String

القيمة المُعادة

يُرجع النص المُدخل مع إحاطة العبارات المتطابقة بالوسوم المحددة. String

أمثلة

إبراز أساسي

SELECT highlight('The quick brown fox', ['quick', 'fox'])
┌─highlight('The quick brown fox', ['quick', 'fox'])─┐
│ The <em>quick</em> brown <em>fox</em>              │
└────────────────────────────────────────────────────┘

الوسوم المخصّصة

SELECT highlight('Hello World', ['hello'], '<b>', '</b>')
┌─highlight('Hello World', ['hello'], '<b>', '</b>')─┐
│ <b>Hello</b> World                                 │
└────────────────────────────────────────────────────┘

ilike

قُدِّم في: v20.6.0

مثل like، لكنه يبحث بدون مراعاة حالة الأحرف. ويدعم عبارة ESCAPE الاختيارية (راجع like).

البنية

ilike(haystack, pattern[, escape_character])
-- haystack ILIKE pattern [ESCAPE 'escape_character']

الوسيطات

  • haystack — السلسلة النصية التي يُجرى فيها البحث. String أو FixedString
  • pattern — نمط LIKE المطلوب مطابقته. String
  • escape_character — سلسلة اختيارية مكوّنة من محرف واحد تُستخدم كمحرف هروب بدلًا من \. الافتراضي: \. String

القيمة المعادة

تُعيد 1 إذا كانت السلسلة تطابق نمط LIKE (غير حساس لحالة الأحرف)، وإلا تُعيد 0. UInt8

أمثلة

مثال على الاستخدام

SELECT ilike('ClickHouse', '%house%');
┌─ilike('ClickHouse', '%house%')─┐
│                              1 │
└────────────────────────────────┘

like

أُضيف في: v1.1.0

تُرجع ما إذا كانت السلسلة haystack تطابق تعبير LIKEpattern.

يمكن أن يحتوي تعبير LIKE على أحرف عادية والرموز الوصفية التالية:

  • يشير % إلى أي عدد من الأحرف كيفما كانت (بما في ذلك عدم وجود أي أحرف).
  • يشير _ إلى حرف واحد كيفما كان.
  • تُستخدم \ لإفلات القيم الحرفية % و_ و\.

تعتمد المطابقة على UTF-8، فمثلًا يطابق _ نقطة الترميز Unicode ‏¥، التي تُمثَّل في UTF-8 باستخدام بايتين.

إذا لم تكن haystack أو تعبير LIKE صالحَين وفق UTF-8، فسيكون السلوك غير معرّف.

لا يُجرى أي تطبيع Unicode تلقائيًا، ويمكنك استخدام الدوال normalizeUTF8* لهذا الغرض.

للمطابقة مع % و_ و\ الحرفية (وهي محارف وصفية في LIKE)، أضف قبلها شرطة مائلة عكسية: \% و\_ و\\. وتفقد الشرطة المائلة العكسية معناها الخاص (أي تُفسَّر حرفيًا) إذا سبقت حرفًا غير % أو _ أو \.

بالنسبة إلى تعابير LIKE من الشكل %needle%، تكون الدالة بالسرعة نفسها التي تتمتع بها الدالة position. أما جميع تعابير LIKE الأخرى فتُحوَّل داخليًا إلى تعبير نمطي وتُنفَّذ بأداء مماثل للدالة match.

عبارة ESCAPE

تحدّد عبارة ESCAPE الاختيارية محرف هروب مخصّصًا (ويجب أن يكون محرف ASCII واحدًا). عند تحديده، يستبدل محرف الهروب المخصّص الشرطة المائلة العكسية الافتراضية عند التعامل مع المحرفين الخاصين % و _. يمكن لمحرف الهروب أن يُستخدم مع ثلاثة أشياء: % (علامة نسبة مئوية حرفية)، و_ (شرطة سفلية حرفية)، ونفسه (محرف هروب حرفي). عند استخدام محرف هروب مخصّص، لا يعود للشرطة المائلة العكسية أي معنى خاص، وتُعامَل على أنها محرف حرفي.

البنية

like(haystack, pattern[, escape_character])
-- haystack LIKE pattern [ESCAPE 'escape_character']

الوسيطات

  • haystack — السلسلة النصية التي يُجرى فيها البحث. String أو FixedString
  • pattern — نمط LIKE المستخدم للمطابقة. يمكن أن يحتوي على % (يطابق أي عدد من المحارف)، و_ (يطابق محرفًا واحدًا)، و\ كحرف هروب. String
  • escape_character — سلسلة نصية اختيارية مكوّنة من محرف واحد تُستخدم كحرف هروب بدلًا من \. القيمة الافتراضية: \. String

القيمة المُعادة

تُعيد 1 إذا كانت السلسلة النصية تطابق نمط LIKE، وإلا فتُعيد 0. UInt8

أمثلة

مثال على الاستخدام

SELECT like('ClickHouse', '%House');
┌─like('ClickHouse', '%House')─┐
│                            1 │
└──────────────────────────────┘

محرف بدل واحد

SELECT like('ClickHouse', 'Click_ouse');
┌─like('ClickHouse', 'Click_ouse')─┐
│                                1 │
└──────────────────────────────────┘

نمط لا يتطابق

SELECT like('ClickHouse', '%SQL%');
┌─like('ClickHouse', '%SQL%')─┐
│                           0 │
└─────────────────────────────┘

بند ESCAPE

SELECT '50%off' LIKE '50#%off' ESCAPE '#';
┌─like('50%off', '50#%off', '#')─┐
│                              1 │
└────────────────────────────────┘

locate

أُضيفت في: v18.16.0

مثل position، ولكن مع تبديل الوسيطين haystack وlocate.

الصياغة

locate(needle, haystack[, start_pos])

الوسيطات

  • needle — السلسلة الفرعية المطلوب البحث عنها. String
  • haystack — السلسلة التي يُجرى فيها البحث. String أو Enum
  • start_pos — اختياري. الموضع في haystack الذي يبدأ منه البحث (مع بدء العد من 1). UInt

القيمة المُعادة

يعيد موضع البداية محسوبًا بالبايتات، بدءًا من 1، إذا عُثر على السلسلة الفرعية، و0 إذا لم يُعثر عليها. UInt64

أمثلة

الاستخدام الأساسي

SELECT locate('ca', 'abcabc')
┌─locate('ca', 'abcabc')─┐
│                      3 │
└────────────────────────┘

match

أُضيف في: v1.1.0

يتحقق مما إذا كانت السلسلة النصية المُدخلة تطابق نمط التعبير النمطي المُعطى.

تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.

تعمل المطابقة على افتراض UTF-8. فعلى سبيل المثال، يُستخدَم ¥ داخليًا على هيئة بايتين، لكن المطابقة تتعامل معه باعتباره نقطة ترميز واحدة. يجب ألا يحتوي التعبير النمطي على بايتات NULL. إذا لم تكن السلسلة النصية المُدخلَة أو النمط بتنسيق UTF-8 صالحين، فسيكون السلوك غير معرّف.

وعلى خلاف السلوك الافتراضي في re2، فإن . يطابق فواصل الأسطر. لتعطيل ذلك، أضف (?-s) في بداية النمط.

النمط غير مقيَّد. ولمطابقة السلسلة النصية بالكامل، قيِّد النمط بنفسك باستخدام ^ و $.

إذا كنت تريد فقط البحث عن سلاسل فرعية، فيمكنك استخدام الدالتين like أو position بدلًا من ذلك، إذ تعملان أسرع بكثير من هذه الدالة.

صياغة عامل التشغيل البديلة: haystack REGEXP pattern أو haystack ~ pattern (بنمط PostgreSQL).

الصياغة

match(haystack, pattern)

الأسماء المستعارة: REGEXP_MATCHES

الوسيطات

  • haystack — سلسلة يُبحث فيها عن النمط. String
  • pattern — نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود. String

القيمة المعادة

تُرجع 1 إذا كان هناك تطابق مع النمط، و0 خلاف ذلك. UInt8

أمثلة

مطابقة الأنماط الأساسية

SELECT match('Hello World', 'Hello.*')
┌─match('Hello World', 'Hello.*')─┐
│                               1 │
└─────────────────────────────────┘

النمط لا يتطابق

SELECT match('Hello World', 'goodbye.*')
┌─match('Hello World', 'goodbye.*')─┐
│                                 0 │
└───────────────────────────────────┘

مطابقة جزء من سلسلة نصية

SELECT match('abcde', 'b.*d'), match('abcde', '^b.*d$')
┌─match('abcde', 'b.*d')─┬─match('abcde', '^b.*d$')─┐
│                      1 │                        0 │
└────────────────────────┴──────────────────────────┘

matchCaseInsensitive

أُضيف في: v26.8.0

تشبه match لكنها تطابق دون مراعاة حالة الأحرف.

تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.

صياغة عامل التشغيل البديلة: haystack ~* pattern (بنمط PostgreSQL).

الصياغة

matchCaseInsensitive(haystack, pattern)
-- haystack ~* pattern

الوسيطات

  • haystack — سلسلة يُبحث فيها عن النمط. String
  • pattern — نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود. String

القيمة المعادة

تُرجع 1 إذا كان هناك تطابق مع النمط دون تمييز بين حالة الأحرف، و0 خلاف ذلك. UInt8

أمثلة

مثال على الاستخدام

SELECT matchCaseInsensitive('Hello World', 'hello.*'), 'Hello World' ~
┌─matchCaseInsensitive('Hello World', 'hello.*')─┬─matchCaseInsensitive('Hello World', 'HELLO.*')─┐
│                                              1 │                                              1 │
└────────────────────────────────────────────────┴────────────────────────────────────────────────┘

multiFuzzyMatchAllIndices

أُضيف في: v20.1.0

يشبه multiFuzzyMatchAny، لكنه يعيد مصفوفة بجميع الفهارس المطابقة لـ haystack، بأي ترتيب، ضمن مسافة تحرير ثابتة.

الصياغة

multiFuzzyMatchAllIndices(haystack, distance, [pattern1, pattern2, ..., patternN])

الوسيطات

  • haystack — سلسلة يُجرى البحث فيها. String
  • distance — الحد الأقصى لمسافة التحرير للمطابقة التقريبية. UInt8
  • pattern — مصفوفة من الأنماط المطلوب المطابقة معها. Array(String)

القيمة المعادة

يعيد مصفوفة تحتوي على جميع الفهارس (بدءًا من 1) التي تطابق haystack ضمن مسافة التحرير المحددة، بأي ترتيب. ويعيد مصفوفة فارغة إذا لم يتم العثور على أي تطابقات. Array(UInt64)

أمثلة

مثال على الاستخدام

SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']);
┌─multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House'])─┐
│ [3,1,4,2]                                                                                     │
└───────────────────────────────────────────────────────────────────────────────────────────────┘

multiFuzzyMatchAny

أُضيف في: v20.1.0

مثل multiMatchAny، لكنه يعيد القيمة 1 إذا طابق أي نمط النص ضمن مسافة تحرير ثابتة. تعتمد هذه الدالة على الميزة التجريبية في مكتبة hyperscan، وقد تكون بطيئة في بعض الحالات الحدّية. يعتمد الأداء على قيمة مسافة التحرير والأنماط المستخدمة، لكنه يكون دائمًا أعلى كلفة مقارنةً بالنظائر غير التقريبية.

البنية

multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternN])

المعاملات

  • haystack — السلسلة التي يُجرى فيها البحث. String
  • distance — الحد الأقصى لمسافة التحرير للمطابقة التقريبية. UInt8
  • pattern — اختياري. مصفوفة من الأنماط للمطابقة معها. Array(String)

القيمة المعادة

تُرجِع 1 إذا طابق أي نمط القيمة haystack ضمن مسافة التحرير المحددة، وإلا فتُرجِع 0. UInt8

أمثلة

مثال على الاستخدام

SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']);
┌─multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose'])─┐
│                                                                             1 │
└───────────────────────────────────────────────────────────────────────────────┘

multiFuzzyMatchAnyIndex

أُضيف في: v20.1.0

مثل multiFuzzyMatchAny، لكنه يُرجع أي فهرس يطابق haystack ضمن مسافة تحرير ثابتة.

الصياغة

multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn])

الوسائط

  • haystack — السلسلة النصية التي يُجرى البحث فيها. String
  • distance — الحد الأقصى لمسافة التحرير للمطابقة التقريبية. UInt8
  • pattern — مصفوفة من الأنماط المطلوب المطابقة معها. Array(String)

القيمة المعادة

يعيد فهرس أي نمط يطابق haystack ضمن مسافة التحرير المحددة (بدءًا من 1)، وإلا يعيد 0. UInt64

أمثلة

مثال على الاستخدام

SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']);
┌─multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse'])─┐
│                                                                                  2 │
└────────────────────────────────────────────────────────────────────────────────────┘

multiMatchAllIndices

قُدِّمت في: v20.1.0

مثل multiMatchAny، لكنها تُرجع مصفوفة بجميع الفهارس التي تطابق haystack بأي ترتيب.

البنية

multiMatchAllIndices(haystack, [pattern1, pattern2, ..., patternn])

الوسيطات

  • haystack — السلسلة التي يُجرى البحث فيها. String
  • pattern — التعبيرات النمطية المطلوب المطابقة معها. String

القيمة المُعادة

مصفوفة تحتوي على جميع الفهارس (بدءًا من 1) التي تطابق haystack بأي ترتيب. وتُرجع مصفوفة فارغة إذا لم يتم العثور على أي تطابقات. Array(UInt64)

أمثلة

مثال على الاستخدام

SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']);
┌─multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse'])─┐
│ [3,2,4]                                                                 │
└─────────────────────────────────────────────────────────────────────────┘

multiMatchAny

أُضيفت في: v20.1.0

تحقّق مما إذا كان واحد على الأقل من عدة أنماط للتعبيرات النمطية يطابق النص المراد البحث فيه.

إذا كنت تريد فقط البحث عن عدة سلاسل فرعية داخل سلسلة نصية، يمكنك استخدام الدالة multiSearchAny بدلًا من ذلك، فهي أسرع بكثير من هذه الدالة.

البنية

multiMatchAny(haystack, pattern1[, pattern2, ...])

الوسيطات

  • haystack — السلسلة التي يُبحث فيها عن الأنماط. String
  • pattern1[, pattern2, ...] — مصفوفة تضم نمط تعبير نمطي واحدًا أو أكثر. Array(String)

القيمة المُعادة

تُرجع 1 إذا طابق أي نمط، و0 خلاف ذلك. UInt8

أمثلة

مطابقة عدة أنماط

SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*'])
┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐
│                                                  1 │
└────────────────────────────────────────────────────┘

لا يطابق أي نمط

SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])
┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐
│                                                    0 │
└──────────────────────────────────────────────────────┘

multiMatchAnyIndex

أُضيف في: v20.1.0

مثل multiMatchAny، لكنه يُرجع فهرس أي تطابق مع haystack.

الصيغة

multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn])

الوسائط

  • haystack — سلسلة نصية يُجرى البحث فيها. String
  • pattern — تعبيرات نمطية تجري المطابقة معها. Array(String)

القيمة المعادة

تعيد فهرس أول نمط مطابق (ابتداءً من 1)، أو 0 إذا لم يتم العثور على أي مطابقة. UInt64

أمثلة

مثال على الاستخدام

SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']);
┌─multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click'])─┐
│                                                             3 │
└───────────────────────────────────────────────────────────────┘

multiSearchAllPositions

أُضيف في: v20.1.0

مثل position، لكنه يعيد مصفوفة من المواضع (بالبايت، بدءًا من 1) لعدة سلاسل فرعية needle ضمن سلسلة haystack.

لا تدعم جميع دوال multiSearch*() أكثر من 2^8 من قيم needle.

الصياغة

multiSearchAllPositions(haystack, needle1[, needle2, ...])

الوسيطات

  • haystack — سلسلة يُجرى البحث فيها. String
  • needle1[, needle2, ...] — مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها. Array(String)

القيمة المعادة

تعيد مصفوفة تحتوي على موضع البداية بالبايت، مع بدء العد من 1، إذا عُثر على السلسلة الفرعية، و0 إذا لم يُعثر عليها. Array(UInt64)

أمثلة

البحث عن عدة سلاسل فرعية

SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])
┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0]                                                          │
└───────────────────────────────────────────────────────────────────┘

multiSearchAllPositionsCaseInsensitive

أُضيف في: v20.1.0

يشبه multiSearchAllPositions، لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.

الصيغة

multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...])

الوسيطات

  • haystack — سلسلة نصية يُجرى البحث فيها. String
  • needle1[, needle2, ...] — مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها. Array(String)

القيمة المعادة

تعيد مصفوفة تتضمن موضع البداية بالبايتات مع بدء العد من 1 (إذا عُثر على السلسلة الفرعية)، و0 إذا لم يُعثر على السلسلة الفرعية. Array(UInt64)

أمثلة

بحث متعدد غير حساس لحالة الأحرف

SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h'])
┌─multiSearchAllPositionsCaseInsensitive('ClickHouse', ['c', 'h'])─┐
│ [1,6]                                                            │
└──────────────────────────────────────────────────────────────────┘

multiSearchAllPositionsCaseInsensitiveUTF8

أُضيف في: v20.1.0

مثل multiSearchAllPositionsUTF8، لكنه يتجاهل اختلاف حالة الأحرف.

البنية

multiSearchAllPositionsCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

الوسائط

  • haystack — سلسلة مرمّزة بترميز UTF-8 يُجرى البحث فيها. String
  • needle — سلاسل فرعية مرمّزة بترميز UTF-8 يُبحث عنها. Array(String)

القيمة المُعادة

مصفوفة بمواقع البداية بالبايت، مع بدء العد من 1 (إذا عُثر على السلسلة الفرعية). وتُرجع 0 إذا لم يُعثر على السلسلة الفرعية. Array

أمثلة

بحث UTF-8 غير متأثر بحالة الأحرف

SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']);
┌─multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР'])─┐
│ [1,13]                                                                                │
└───────────────────────────────────────────────────────────────────────────────────────┘

multiSearchAllPositionsUTF8

متوفرة منذ: v20.1.0

تشبه multiSearchAllPositions، لكنها تفترض أن haystack والسلاسل الفرعية needle عبارة عن سلاسل نصية مرمّزة بترميز UTF-8.

الصياغة

multiSearchAllPositionsUTF8(haystack, needle1[, needle2, ...])

الوسيطات

  • haystack — سلسلة مرمّزة بترميز UTF-8 يُجرى البحث فيها. String
  • needle1[, needle2, ...] — مصفوفة من السلاسل الفرعية المرمّزة بترميز UTF-8 المطلوب البحث عنها. Array(String)

القيمة المعادة

تعيد مصفوفة تتضمّن مواضع البداية بالبايتات، محسوبةً ابتداءً من 1 (إذا عُثر على السلسلة الفرعية)، و0 إذا لم يُعثر على السلسلة الفرعية. Array

أمثلة

بحث متعدد في UTF-8

SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H'])
┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐
│ [1,6]                                                 │
└───────────────────────────────────────────────────────┘

multiSearchAny

أُضيف في: v20.1.0

يتحقق مما إذا كانت واحدة على الأقل من السلاسل المطلوب البحث عنها تطابق السلسلة المراد البحث فيها.

توفّر الدوال multiSearchAnyCaseInsensitive، multiSearchAnyUTF8 وmultiSearchAnyCaseInsensitiveUTF8 صيغًا غير حساسة لحالة الأحرف و/أو صيغ UTF-8 لهذه الدالة.

الصيغة

multiSearchAny(haystack, needle1[, needle2, ...])

الوسيطات

  • haystack — السلسلة التي يُجرى البحث فيها. String
  • needle1[, needle2, ...] — مصفوفة من السلاسل الفرعية المراد البحث عنها. Array(String)

القيمة المعادة

يعيد 1 عند وجود مطابقة واحدة على الأقل، وإلا يعيد 0. UInt8

أمثلة

البحث عن أي مطابقة

SELECT multiSearchAny('ClickHouse',['C','H'])
┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐
│                                        1 │
└──────────────────────────────────────────┘

multiSearchAnyCaseInsensitive

أُضيفت في: v20.1.0

مثل multiSearchAny، لكنه يتجاهل حالة الأحرف.

البنية

multiSearchAnyCaseInsensitive(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — السلسلة التي يُجرى فيها البحث. String
  • needle — السلاسل الفرعية المطلوب البحث عنها. Array(String)

القيمة المعادة

يعيد 1 إذا وُجدت مطابقة واحدة على الأقل غير حسّاسة لحالة الأحرف، وإلا فيعيد 0. UInt8

أمثلة

بحث غير حسّاس لحالة الأحرف

SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h'])
┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐
│                                                       1 │
└─────────────────────────────────────────────────────────┘

multiSearchAnyCaseInsensitiveUTF8

استُحدث في: v20.1.0

مثل multiSearchAnyUTF8 لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.

الصياغة

multiSearchAnyCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — سلسلة UTF-8 يُجرى فيها البحث. String
  • needle — سلاسل فرعية بترميز UTF-8 يُبحث عنها. Array(String)

القيمة المُعادة

تُرجع 1 إذا وُجدت مطابقة واحدة على الأقل دون حساسية لحالة الأحرف، وإلا فتُرجع 0. UInt8

أمثلة

في سلسلة UTF-8 'Здравствуйте'، تحقّق مما إذا كان الحرف 'з' (حرفًا صغيرًا) موجودًا

SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з'])
┌─multiSearchAnyCaseInsensitiveUTF8('Здравствуйте', ['з'])─┐
│                                                        1 │
└──────────────────────────────────────────────────────────┘

multiSearchAnyUTF8

أُضيفت في: v20.1.0

مثل multiSearchAny، لكنها تفترض أن haystack والسلاسل الفرعية needle هي سلاسل نصية مرمّزة بترميز UTF-8.

الصيغة

multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — سلسلة UTF-8 يُجرى البحث داخلها. String
  • needle — سلاسل فرعية بترميز UTF-8 يُبحث عنها. Array(String)

القيمة المُعادة

تُرجع 1 إذا وُجدت مطابقة واحدة على الأقل، وإلا فتُرجع 0 إذا لم توجد أي مطابقة. UInt8

أمثلة

باعتبار '你好,世界' ('Hello, world') سلسلة UTF-8، تحقّق مما إذا كانت السلسلة تحتوي على أي من الحرفين 你 أو 界

SELECT multiSearchAnyUTF8('你好,世界', ['你', '界']) AS result
┌─result─┐
│      1 │
└────────┘

multiSearchFirstIndex

أُضيف في: v20.1.0

يبحث عن عدة سلاسل needle داخل سلسلة haystack (مع مراعاة حالة الأحرف)، ويُرجع فهرسًا يبدأ من 1 لأول needle يتم العثور عليه.

البنية

multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN])

الوسائط

  • haystack — السلسلة النصية المطلوب البحث فيها. String
  • needles — مصفوفة من السلاسل النصية المطلوب البحث عنها. Array(String)

القيمة المُعادة

تعيد الفهرس الذي يبدأ من 1 (أي الموضع داخل مصفوفة needles) لأول needle يُعثر عليه في haystack. وتعيد 0 إذا لم يتم العثور على أي من عناصر needles. البحث حساس لحالة الأحرف. UInt64

أمثلة

مثال على الاستخدام

SELECT multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server']);
┌─multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server'])─┐
│                                                                             1 │
└───────────────────────────────────────────────────────────────────────────────┘

السلوك المراعي لحالة الأحرف

SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']);
┌─multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server'])─┐
│                                                                             2 │
└───────────────────────────────────────────────────────────────────────────────┘

لم يتم العثور على أي تطابق

SELECT multiSearchFirstIndex('Hello World', ['goodbye', 'test']);
┌─multiSearchFirstIndex('Hello World', ['goodbye', 'test'])─┐
│                                                         0 │
└───────────────────────────────────────────────────────────┘

multiSearchFirstIndexCaseInsensitive

قُدِّمت في: v20.1.0

تعيد الفهرس i (ابتداءً من 1) لأول needle&#95;i يتم العثور عليه من اليسار في السلسلة haystack، وتعيد 0 بخلاف ذلك. يتجاهل حالة الأحرف.

البنية

multiSearchFirstIndexCaseInsensitive(haystack, [needle1, needle2, ..., needleN]

الوسيطات

  • haystack — السلسلة النصية التي يُجرى فيها البحث. String
  • needle — السلاسل الفرعية المراد البحث عنها. Array(String)

القيمة المُعادة

يُرجع الفهرس (بدءًا من 1) لأول needle يُعثر عليه من جهة اليسار. وإذا لم توجد أي مطابقة، فستكون القيمة 0. UInt8

أمثلة

مثال على الاستخدام

SELECT multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello']);
┌─multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello'])─┐
│                                                                       1 │
└─────────────────────────────────────────────────────────────────────────┘

multiSearchFirstIndexCaseInsensitiveUTF8

أُضيفت في: v20.1.0

تبحث عن عدة سلاسل needle داخل سلسلة haystack، من دون تمييز بين الأحرف الكبيرة والصغيرة مع دعم ترميز UTF-8، وتُرجع فهرسًا يبدأ من 1 لأول needle يتم العثور عليه.

الصيغة

multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — السلسلة النصية المطلوب البحث فيها. String
  • needles — مصفوفة من السلاسل النصية المطلوب البحث عنها. Array(String)

القيمة المُعادة

تُرجع الفهرس ذا الأساس 1 (أي الموضع في مصفوفة needles) لأول سلسلة يتم العثور عليها داخل haystack. وتُرجع 0 إذا لم يتم العثور على أي سلسلة. البحث غير حساس لحالة الأحرف، ويراعي ترميز المحارف UTF-8. UInt64

أمثلة

مثال على الاستخدام

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server']);
┌─multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server'])─┐
│                                                                                            1 │
└──────────────────────────────────────────────────────────────────────────────────────────────┘

التعامل مع حالة الأحرف في UTF-8

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']);
┌─multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ'])─┐
│                                                                         1 │
└───────────────────────────────────────────────────────────────────────────┘

لم يتم العثور على أي تطابق

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test']);
┌─multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test'])─┐
│                                                                            0 │
└──────────────────────────────────────────────────────────────────────────────┘

multiSearchFirstIndexUTF8

قُدِّمت في: v20.1.0

تُرجع الفهرس i (بدءًا من 1) لأول needle&#95;i يتم العثور عليه من أقصى اليسار في السلسلة haystack، وتُرجع 0 بخلاف ذلك. وتفترض أن haystack وneedle سلسلتان مرمّزتان بترميز UTF-8.

البنية

multiSearchFirstIndexUTF8(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — سلسلة UTF-8 يُجرى البحث فيها. String
  • needle — مصفوفة من السلاسل الفرعية بترميز UTF-8 المطلوب البحث عنها. Array(String)

القيمة المعادة

يعيد الفهرس (بدءًا من 1) لأول needle يتم العثور عليه من جهة اليسار. وإذا لم توجد أي مطابقة، فتكون القيمة 0. UInt8

أمثلة

مثال على الاستخدام

SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']);
┌─multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте'])─┐
│                                                                      1 │
└────────────────────────────────────────────────────────────────────────┘

multiSearchFirstPosition

قُدِّمت في: v20.1.0

تشبه position، لكنها تُرجع الإزاحة الأولى في سلسلة haystack التي تطابق أيًا من سلاسل needle المتعددة.

توفّر الدوال multiSearchFirstPositionCaseInsensitive وmultiSearchFirstPositionUTF8 وmultiSearchFirstPositionCaseInsensitiveUTF8 أشكالًا غير حساسة لحالة الأحرف و/أو أشكال UTF-8 لهذه الدالة.

الصياغة

multiSearchFirstPosition(haystack, needle1[, needle2, ...])

الوسيطات

  • haystack — السلسلة النصية التي يُجرى فيها البحث. String
  • needle1[, needle2, ...] — مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها. Array(String)

القيمة المعادة

يعيد أول إزاحة في سلسلة haystack تطابق أيًا من سلاسل needle المتعددة، وإلا فستكون 0 إذا لم يُعثر على أي تطابق. UInt64

أمثلة

البحث عن أول موضع

SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld'])
┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐
│                                                             3 │
└───────────────────────────────────────────────────────────────┘

multiSearchFirstPositionCaseInsensitive

تم تقديمه في: v20.1.0

مثل multiSearchFirstPosition، لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.

البنية

multiSearchFirstPositionCaseInsensitive(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — السلسلة التي يُجرى فيها البحث. String
  • needle — مصفوفة من السلاسل الفرعية المطلوب البحث عنها. Array(String)

القيمة المعادة

تعيد أول إزاحة من اليسار في سلسلة haystack تطابق أيًّا من سلاسل needle. وتعيد 0 إذا لم توجد أي مطابقة. UInt64

أمثلة

أول موضع دون حساسية لحالة الأحرف

SELECT multiSearchFirstPositionCaseInsensitive('HELLO WORLD',['wor', 'ld', 'ello'])
┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐
│                                                                             2 │
└───────────────────────────────────────────────────────────────────────────────┘

multiSearchFirstPositionCaseInsensitiveUTF8

أُضيف في: v20.1.0

يشبه multiSearchFirstPosition، لكنه يفترض أن haystack وneedle سلسلتان بترميز UTF-8 ولا يميّز بين الأحرف الكبيرة والصغيرة.

الصياغة

multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

المعاملات

  • haystack — سلسلة نصية بترميز UTF-8 يُجرى البحث فيها. String
  • needle — مصفوفة من السلاسل الفرعية بترميز UTF-8 المطلوب البحث عنها. Array(String)

القيمة المعادة

تعيد أول إزاحة في سلسلة haystack تطابق أيًّا من سلاسل needle المتعددة، مع تجاهل حالة الأحرف. وتعيد 0 إذا لم يتم العثور على أي تطابق. UInt64

أمثلة

اعثر على أول إزاحة في سلسلة UTF-8 'Здравствуй, мир' ('Hello, world') تطابق أيًّا من قيم needle المعطاة

SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра'])
┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра'])─┐
│                                                                                      1 │
└────────────────────────────────────────────────────────────────────────────────────────┘

multiSearchFirstPositionUTF8

أُضيفت في: v20.1.0

مثل multiSearchFirstPosition، لكنه يفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8.

البنية

multiSearchFirstPositionUTF8(haystack, [needle1, needle2, ..., needleN])

الوسيطات

  • haystack — سلسلة UTF-8 يُجرى البحث ضمنها. String
  • needle — مصفوفة من المقاطع الفرعية بترميز UTF-8 المطلوب البحث عنها. Array(String)

القيمة المُعادة

أول إزاحة في سلسلة haystack تطابق أيًا من سلاسل needle المتعددة. تُعيد 0 إذا لم توجد أي مطابقة. UInt64

أمثلة

اعثر على أول إزاحة في سلسلة UTF-8 'Здравствуй, мир' ('Hello, world') تطابق أيًا من قيم needle المعطاة

SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст'])
┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐
│                                                                       4 │
└─────────────────────────────────────────────────────────────────────────┘

ngramDistance

أُضيفت في: v20.1.0

تحسب مسافة 4-gram بين سلسلتين نصيتين. ولهذا، تحسب الفرق المتماثل بين مجموعتين متعدّدتي العناصر من 4-grams ثم تقسّمه على مجموع عدد عناصرهما. كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين النصيتين.

للبحث غير المتأثر بحالة الأحرف و/أو بتنسيق UTF8، استخدم الدوال ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8.

البنية

ngramDistance(haystack, needle)

الوسيطات

  • haystack — سلسلة نصية للمقارنة. String
  • needle — سلسلة نصية للمقارنة. String

القيمة المُعادة

يُرجع عددًا من النوع Float32 بين 0 و1. وكلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين. Float32

أمثلة

حساب مسافة 4-gram

SELECT ngramDistance('ClickHouse', 'ClickHouses')
┌─ngramDistance('ClickHouse', 'ClickHouses')─┐
│                                 0.06666667 │
└────────────────────────────────────────────┘

ngramDistanceCaseInsensitive

قُدِّمت في: v20.1.0

توفّر نسخة غير حساسة لحالة الأحرف من ngramDistance. تحسب مسافة 4-gram بين سلسلتين نصيتين مع تجاهل حالة الأحرف. كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين النصيتين.

الصيغة

ngramDistanceCaseInsensitive(haystack, needle)

المعاملات

  • haystack — سلسلة المقارنة الأولى. String
  • needle — سلسلة المقارنة الثانية. String

القيمة المُعادة

تعيد رقمًا من النوع Float32 بين 0 و1. Float32

أمثلة

مسافة 4-gram بدون تمييز حالة الأحرف

SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse')
┌─ngramDistanceCaseInsensitive('ClickHouse', 'clickhouse')─┐
│                                                        0 │
└──────────────────────────────────────────────────────────┘

ngramDistanceCaseInsensitiveUTF8

أُضيف في: v20.1.0

يوفّر إصدار UTF-8 من ngramDistance لا يراعي حالة الأحرف. يفترض أن السلسلتين needle وhaystack مرمَّزتان بترميز UTF-8، ولا يراعي حالة الأحرف. يحسب مسافة 3-gram بين سلسلتين بترميز UTF-8 دون مراعاة حالة الأحرف. كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين.

البنية

ngramDistanceCaseInsensitiveUTF8(haystack, needle)

الوسائط

  • haystack — سلسلة المقارنة الأولى المرمّزة بترميز UTF-8. String
  • needle — سلسلة المقارنة الثانية المرمّزة بترميز UTF-8. String

القيمة المعادة

تعيد قيمة من نوع Float32 بين 0 و1. Float32

أمثلة

مسافة 3-gram غير الحساسة لحالة الأحرف في UTF-8

SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE')
┌─ngramDistanceCaseInsensitiveUTF8('abcde', 'CDE')─┐
│                                              0.5 │
└──────────────────────────────────────────────────┘

ngramDistanceUTF8

قُدِّمت في: v20.1.0

يوفّر إصدار UTF-8 من ngramDistance. يفترض أن سلسلتي needle وhaystack مرمّزتان بترميز UTF-8. يحسب مسافة 3-gram بين سلسلتين بترميز UTF-8. كلما كانت القيمة المُعادة أصغر، زاد التشابه بين السلسلتين.

البنية

ngramDistanceUTF8(haystack, needle)

الوسائط

  • haystack — سلسلة المقارنة الأولى المرمّزة بترميز UTF-8. String
  • needle — سلسلة المقارنة الثانية المرمّزة بترميز UTF-8. String

القيمة المُعادة

يعيد عددًا من نوع Float32 بين 0 و1. Float32

أمثلة

مسافة 3-gram بترميز UTF-8

SELECT ngramDistanceUTF8('abcde','cde')
┌─ngramDistanceUTF8('abcde', 'cde')─┐
│                               0.5 │
└───────────────────────────────────┘

ngramSearch

أُضيف في: v20.1.0

يتحقق مما إذا كانت مسافة 4-gram بين سلسلتين نصيتين أقل من أو تساوي عتبة محددة.

لإجراء بحث غير حساس لحالة الأحرف أو بتنسيق UTF8 أو كليهما، استخدم الدوال ngramSearchCaseInsensitive وngramSearchUTF8 وngramSearchCaseInsensitiveUTF8.

الصيغة

ngramSearch(haystack, needle)

الوسيطات

  • haystack — سلسلة نصية للمقارنة. String
  • needle — سلسلة نصية للمقارنة. String

القيمة المُعادة

تعيد 1 إذا كانت مسافة 4-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فتعيد 0. UInt8

أمثلة

البحث باستخدام 4-grams

SELECT ngramSearch('ClickHouse', 'Click')
┌─ngramSearch('ClickHouse', 'Click')─┐
│                                  1 │
└────────────────────────────────────┘

ngramSearchCaseInsensitive

أُضيفت في: v20.1.0

توفّر متغيّرًا غير حساس لحالة الأحرف من ngramSearch. تحسب الفرق غير المتماثل بين سلسلة needle وسلسلة haystack، أي عدد مقاطع n-gram في needle مطروحًا منه العدد المشترك من مقاطع n-gram، ثم يُطبَّع على عدد مقاطع n-gram في needle. تتحقق مما إذا كانت مسافة 4-gram بين سلسلتين أقل من أو تساوي threshold محددة، مع تجاهل حالة الأحرف.

البنية

ngramSearchCaseInsensitive(haystack, needle)

الوسائط

  • haystack — سلسلة نصية للمقارنة. String
  • needle — سلسلة نصية للمقارنة. String

القيمة المُعادة

تعيد 1 إذا كانت مسافة 4-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فتعيد 0. UInt8

أمثلة

بحث غير حساس لحالة الأحرف باستخدام 4-grams

SELECT ngramSearchCaseInsensitive('Hello World','hello')
┌─ngramSearchCaseInsensitive('Hello World', 'hello')─┐
│                                                  1 │
└────────────────────────────────────────────────────┘

ngramSearchCaseInsensitiveUTF8

قُدِّم في: v20.1.0

يوفّر إصدارًا من ngramSearch يعمل على UTF-8 دون تمييز بين الأحرف الكبيرة والصغيرة. يفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8، ويتجاهل الفرق بين الأحرف الكبيرة والصغيرة. يتحقق مما إذا كانت مسافة 3-gram بين سلسلتين نصيتين بترميز UTF-8 أقل من أو تساوي عتبة محددة، دون تمييز بين الأحرف الكبيرة والصغيرة.

الصيغة

ngramSearchCaseInsensitiveUTF8(haystack, needle)

الوسيطات

  • haystack — سلسلة بترميز UTF-8 للمقارنة. String
  • needle — سلسلة بترميز UTF-8 للمقارنة. String

القيمة المُعادة

يعيد 1 إذا كانت مسافة 3-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فيعيد 0. UInt8

أمثلة

بحث UTF-8 غير حساس لحالة الأحرف باستخدام 3-grams

SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')
┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐
│                                               0.57142854 │
└──────────────────────────────────────────────────────────┘

ngramSearchUTF8

قُدِّمت في: v20.1.0

توفّر إصدارًا بترميز UTF-8 من ngramSearch. تفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8. يتحقق مما إذا كانت مسافة 3-gram بين سلسلتين نصيتين بترميز UTF-8 أقل من أو تساوي عتبة محددة.

البنية

ngramSearchUTF8(haystack, needle)

الوسائط

  • haystack — سلسلة بترميز UTF-8 للمقارنة. سلسلة
  • needle — سلسلة بترميز UTF-8 للمقارنة. سلسلة

القيمة المُعادة

يُرجع 1 إذا كانت مسافة 3-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فيُرجع 0. UInt8

أمثلة

البحث في UTF-8 باستخدام 3-grams

SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд')
┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐
│                                    0.5 │
└────────────────────────────────────────┘

notILike

أُتيح في: v20.6.0

يتحقق مما إذا كانت السلسلة النصية لا تطابق نمطًا، مع تجاهل حالة الأحرف. يمكن أن يحتوي النمط على المحرفين الخاصين % و _ لمطابقة SQL LIKE. ويدعم عبارة ESCAPE الاختيارية (راجع like).

البنية

notILike(haystack, pattern[, escape_character])
-- haystack NOT ILIKE pattern [ESCAPE 'escape_character']

الوسيطات

  • haystack — سلسلة الإدخال المراد البحث فيها. String أو FixedString
  • pattern — نمط SQL LIKE المراد مطابقته. يطابق % أي عدد من المحارف (بما في ذلك الصفر)، ويطابق _ محرفًا واحدًا فقط. String
  • escape_character — سلسلة اختيارية من محرف واحد تُستخدَم كمحرف هروب بدلًا من \. القيمة الافتراضية: \. String

القيمة المُعادة

تعيد 1 إذا كانت السلسلة لا تطابق النمط (من دون حساسية لحالة الأحرف)، وإلا فتعيد 0. UInt8

أمثلة

مثال على الاستخدام

SELECT notILike('ClickHouse', '%house%');
┌─notILike('ClickHouse', '%house%')─┐
│                                 0 │
└───────────────────────────────────┘

notLike

أُضيف في: v1.1.0

مماثلة لـ like، لكنها تنفي النتيجة. وتدعم بند ESCAPE الاختياري (راجع like).

الصيغة

notLike(haystack, pattern[, escape_character])
-- haystack NOT LIKE pattern [ESCAPE 'escape_character']

الوسيطات

  • haystack — السلسلة التي يُجرى فيها البحث. String أو FixedString
  • pattern — نمط LIKE المراد مطابقته. String
  • escape_character — سلسلة اختيارية مكوّنة من محرف واحد تُستخدم كمحرف هروب بدلًا من \. القيمة الافتراضية: \. String

القيمة المعادة

تُرجع 1 إذا كانت السلسلة لا تطابق نمط LIKE، وإلا فتُرجع 0. UInt8

أمثلة

مثال على الاستخدام

SELECT notLike('ClickHouse', '%House%');
┌─notLike('ClickHouse', '%House%')─┐
│                                0 │
└──────────────────────────────────┘

نمط غير متطابق

SELECT notLike('ClickHouse', '%SQL%');
┌─notLike('ClickHouse', '%SQL%')─┐
│                              1 │
└────────────────────────────────┘

notMatch

أُضيف في: v26.8.0

مشابهة للدالة match، لكنها تنفي النتيجة: تتحقق من أن السلسلة النصية لا تطابق نمط التعبير النمطي.

تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.

صياغة عامل التشغيل البديلة: haystack !~ pattern (بنمط PostgreSQL).

الصيغة

notMatch(haystack, pattern)
-- haystack !~ pattern

وسيطات الدالة

  • haystack — سلسلة يُبحث فيها عن النمط. String
  • pattern — نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود. String

القيمة المعادة

تُرجع 0 إذا كان هناك تطابق مع النمط، و1 خلاف ذلك. UInt8

أمثلة

مثال على الاستخدام

SELECT notMatch('Hello World', 'Hello.*'), 'Hello World' !
┌─notMatch('Hello World', 'Hello.*')─┬─notMatch('Hello World', 'goodbye.*')─┐
│                                  0 │                                    1 │
└────────────────────────────────────┴──────────────────────────────────────┘

notMatchCaseInsensitive

أُضيف في: v26.8.0

تشبه matchCaseInsensitive، لكنها تنفي النتيجة: إذ تتحقق من أن السلسلة النصية لا تطابق نمط التعبير النمطي دون تمييز بين حالة الأحرف.

تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.

صياغة عامل التشغيل البديلة: haystack !~* pattern (بأسلوب PostgreSQL).

الصيغة

notMatchCaseInsensitive(haystack, pattern)
-- haystack !~* pattern

وسيطات الدالة

  • haystack — سلسلة يُبحث فيها عن النمط. String
  • pattern — نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود. String

القيمة المعادة

تُرجع 0 إذا كان النمط يتطابق دون تمييز حالة الأحرف، و1 خلاف ذلك. UInt8

أمثلة

مثال على الاستخدام

SELECT notMatchCaseInsensitive('Hello World', 'hello.*'), 'Hello World' !
┌─notMatchCaseInsensitive('Hello World', 'hello.*')─┬─notMatchCaseInsensitive('Hello World', 'GOODBYE.*')─┐
│                                                 0 │                                                   1 │
└───────────────────────────────────────────────────┴─────────────────────────────────────────────────────┘

position

أُضيف في: v1.1.0

يعيد موضع السلسلة الفرعية needle داخل السلسلة haystack (بالبايتات، بدءًا من 1).

إذا كانت السلسلة الفرعية needle فارغة، فتُطبَّق القواعد التالية:

  • إذا لم يتم تحديد start_pos: فأعد 1
  • إذا كان start_pos = 0: فأعد 1
  • إذا كان start_pos >= 1 وstart_pos <= length(haystack) + 1: فأعد start_pos
  • بخلاف ذلك: فأعد 0

تنطبق القواعد نفسها أيضًا على الدوال locate، وpositionCaseInsensitive، وpositionUTF8، وpositionCaseInsensitiveUTF8.

الصيغة

position(haystack, needle[, start_pos])

الوسيطات

  • haystack — السلسلة التي يُجرى البحث فيها. String أو Enum
  • needle — السلسلة الفرعية المراد البحث عنها. String
  • start_pos — الموضع في haystack الذي يبدأ منه البحث (بترقيم يبدأ من 1). اختياري. UInt

القيمة المعادة

يعيد موضع البداية بالبايت، مع العد بدءًا من 1، إذا عُثر على السلسلة الفرعية، وإلا فتكون القيمة 0 إذا لم يُعثر عليها. UInt64

أمثلة

الاستخدام الأساسي

SELECT position('Hello, world!', '!')
┌─position('Hello, world!', '!')─┐
│                             13 │
└────────────────────────────────┘

مع الوسيطة start_pos

SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7)
┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐
│                                 5 │                                 9 │
└───────────────────────────────────┴───────────────────────────────────┘

صيغة needle IN haystack

SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s)
┌─equals(6, position(s, '/'))─┐
│                           1 │
└─────────────────────────────┘

سلسلة فرعية لعبارة البحث الفارغة

SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5)
┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐
│                   1 │                      1 │                      1 │                      2 │                      3 │                      4 │                      0 │
└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘

positionCaseInsensitive

أُضيف في: v1.1.0

مثل position، لكنه غير حساس لحالة الأحرف.

الصيغة

positionCaseInsensitive(haystack, needle[, start_pos])

الأسماء المستعارة: instr

الوسيطات

  • haystack — السلسلة التي يُجرى البحث فيها. String أو Enum
  • needle — السلسلة الفرعية المطلوب البحث عنها. String
  • start_pos — اختياري. الموضع (مع احتساب المواضع بدءًا من 1) في haystack الذي يبدأ منه البحث. UInt*

القيمة المُعادة

تعيد موضع البداية بالبايتات، مع احتساب المواضع بدءًا من 1، إذا عُثر على السلسلة الفرعية، وإلا فتعيد 0. UInt64

أمثلة

بحث غير حساس لحالة الأحرف

SELECT positionCaseInsensitive('Hello, world!', 'hello')
┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│                                                 1 │
└───────────────────────────────────────────────────┘

positionCaseInsensitiveUTF8

أُضيفت في: v1.1.0

مثل positionUTF8، لكنها تبحث مع تجاهل حالة الأحرف.

الصيغة

positionCaseInsensitiveUTF8(haystack, needle[, start_pos])

المعاملات

  • haystack — السلسلة التي يُجرى البحث فيها. String أو Enum
  • needle — السلسلة الفرعية المراد البحث عنها. String
  • start_pos — اختياري. الموضع في haystack الذي يبدأ منه البحث (مع احتساب الموضع الأول على أنه 1). UInt*

القيمة المُعادة

تعيد موضع البداية بالبايتات مع العد ابتداءً من 1 إذا عُثر على السلسلة الفرعية، وإلا فتعيد 0 إذا لم يُعثر عليها. UInt64

أمثلة

بحث UTF-8 غير حساس لحالة الأحرف

SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР')
┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐
│                                                8 │
└──────────────────────────────────────────────────┘

positionUTF8

أُضيف في: v1.1.0

يشبه position، لكنه يفترض أن haystack وneedle سلسلتان نصيتان مرمّزتان بترميز UTF-8.

الصيغة

positionUTF8(haystack, needle[, start_pos])

الوسيطات

  • haystack — السلسلة التي يُجرى البحث فيها. String أو Enum
  • needle — السلسلة الفرعية المراد البحث عنها. String
  • start_pos — اختياري. الموضع في haystack الذي يبدأ منه البحث (مع بدء العد من 1). UInt*

القيمة المُعادة

يُرجع موضع البداية بالبايتات مع احتساب المواضع ابتداءً من 1 إذا عُثر على السلسلة الفرعية، وإلا فستكون القيمة 0 إذا لم يُعثر عليها. UInt64

أمثلة

عدّ محارف UTF-8

SELECT positionUTF8('Motörhead', 'r')
┌─positionUTF8('Motörhead', 'r')─┐
│                              5 │
└────────────────────────────────┘
Navigation