说明
当前高级功能仅对部分用户邀请开放,暂未全面开放,如有疑问请提交工单咨询。
全文检索(或仅文本搜索)提供了识别满足查询的自然语言文档的功能。最常见的搜索类型是查找包含给定查询词的所有文档。全文索引允许对文档进行预处理并保存索引以供以后快速搜索。我们通过增加文本倒排索引的能力,来支持更快速的文本检索和过滤的方式。
ByteHouse 企业版支持通过 SQL 语法来进行全文检索,本文将介绍如何创建全文索引并进行查询。
目前全文检索支持根据两种文本分词索引方式:
创建全文检索的基本语法举例如下,根据索引方式的不同,我们需要为inverted()中设置不同的值。
CREATE TABLE tab ( `key` UInt64, `str` String, INDEX inv_idx(str) TYPE inverted(0) GRANULARITY 1 ) ENGINE = MergeTree ORDER BY key SETTINGS index_granularity = 1024;
设置inverted(0)
或者inverted()
时,分词器将设置为“tokens”,即沿空格分割字符串。
CREATE TABLE test_inverted_with_token ( `key` UInt64, `doc` String, -- low(doc) 只将 英文字母 转换为 小写后进行文本处理 -- -- 在不特殊指定时默认采用 Token 进行分词 -- INDEX doc_idx lower(doc) TYPE inverted GRANULARITY 1 ) ENGINE = MergeTree() ORDER BY key SETTINGS index_granularity = 1024;
设置为inverted(N)
时,即是使用 N-gram 分词器,范围为[ 2 , 8 ]。
Ngram 分词遇到指定的字符(如 : 空白、标点)时分割文本,然后返回指定长度的每个单词的 N-grams。通常用于查询不使用空格或具有较长复合词的语言。
CREATE TABLE test_inverted_with_ngram ( `key` UInt64, `doc` String, -- low(doc) 只将 英文字母 转换为 小写后进行文本处理 -- -- 指定数字 N 代表采用 N-gram 对文本分词 -- INDEX doc_idx lower(doc) TYPE inverted(4) GRANULARITY 1 ) ENGINE = MergeTree() ORDER BY key SETTINGS index_granularity = 1024;
-- 将按照seperators里包含的所有字符进行分割 -- 如下会根据 , 和 ; 分割 INDEX doc_idx doc TYPE inverted('char_sep','{"seperators": ",;"}') GRANULARITY 1
-- token 分词 INDEX doc_idx doc TYPE inverted('token','{}') GRANULARITY 1 INDEX doc_idx doc TYPE inverted('token','{"density": 1.0}') GRANULARITY 1 -- 3 n-gram 分词 INDEX doc_idx doc TYPE inverted('ngram','{ "ngrams": 3}') GRANULARITY 1 INDEX doc_idx doc TYPE inverted('ngram','{ "ngrams": 3, "density": 1.0}') GRANULARITY 1
函数名 | 描述 |
---|---|
| 检查字段值是否等于指定值。 |
| 检查字段值是否不等于指定值。 |
| 检查字段值是否匹配指定模式。 |
| 检查字段值是否不匹配指定模式。 |
| 检查字段值是否包含指定令牌。 |
| 检查字段值是否以指定前缀开头。 |
| 检查字段值是否以指定后缀结尾。 |
| 对字段的任意值使用指定的搜索词进行多搜索。 |
| 检查字段值是否不在指定值列表中。 |
| 检查字段值是否在指定值列表中。 |
| 检查 |
函数名 | 功能描述 |
---|---|
| 判断一个元素是否在给定的数组或集合中 |
| 判断给定的数组或集合中是否至少有一个元素满足指定的条件 |
| 检查一个数组或集合是否满足指定的条件 |