Doris:倒排索引

news2024/11/27 11:50:55

目录

一、倒排索引介绍

二、倒排索引语法

2.1建表时创建倒排索引

2.2 已有表增加倒排索引

2.3 删除索引

三、使用倒排索引

3.1 创建带有倒排索引的表

3.2 插入数据

3.3利用倒排索引查询

3.4 自定义分词


一、倒排索引介绍

        倒排索引,是信息检索领域常用的索引技术,将文本分成一个个词,构建 词 -> 文档编号 的索引,可以快速查找一个词在哪些文档出现。从 2.0.0 版本开始,Doris 支持倒排索引,可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询,快速从海量数据中过滤出满足条件的行。

二、倒排索引语法

2.1建表时创建倒排索引

        在新建表时创建索引同时使用USING INVERTED指定索引类型为倒排索引,语法如下:

CREATE TABLE table_name
(
  column_name1 TYPE1,
  column_name2 TYPE2,
  column_name3 TYPE3,
  INDEX idx_name1(column_name1) USING INVERTED [PROPERTIES(...)] ,
  INDEX idx_name2(column_name2) USING INVERTED [PROPERTIES(...)]
)
table_properties;

        PROPERTIES 是可选的,用于指定倒排索引的额外属性,主要支持以下属性:

1. parser:指定分词器(english、chinese、unicode)

  • `english` 是英文分词,适合被索引列是英文的情况,用空格和标点符号分词,性能高
  • `chinese` 是中文分词,适合被索引列主要是中文的情况,性能比 English 分词低
  • `unicode` 是多语言混合类型分词,适用于中英文混合、多语言混合的情况。它能够对邮箱前缀和后缀、IP 地址以及字符数字混合进行分词,并且可以对中文按字符分词。
  • 默认不指定代表不分词

2. parser_mode:用于指定分词的模式,目前 parser = chinese 时支持如下几种模式:

  • fine_grained:细粒度模式,倾向于分出比较短、较多的词,比如 '武汉市长江大桥' 会分成 '武汉', '武汉市', '市长', '长江', '长江大桥', '大桥' 6 个词
  • coarse_grained:粗粒度模式,倾向于分出比较长、较少的词,,比如 '武汉市长江大桥' 会分成 '武汉市' '长江大桥' 2 个词
  • 默认 coarse_grained

3. lower_case:是否将分词进行小写转换,从而在匹配的时候实现忽略大小写

  • true: 转换小写
  • false:不转换小写
  • 从 2.1.2 版本开始默认为 true,自动转小写,之前的版本默认为 false

2.2 已有表增加倒排索引

        1.添加索引:支持CREATE INDEX 和 ALTER TABLE ADD INDEX 两种语法,参数跟建表时索引定义相同。

-- 语法 1
CREATE INDEX idx_name ON table_name(column_name) USING INVERTED [PROPERTIES(...)] [COMMENT 'your comment'];
-- 语法 2
ALTER TABLE table_name ADD INDEX idx_name(column_name) USING INVERTED [PROPERTIES(...)] [COMMENT 'your comment'];

        2.构建索引:CREATE / ADD INDEX 操作只是新增了索引定义,这个操作之后的新写入数据会生成倒排索引,而存量数据需要使用 BUILD INDEX 触发:

-- 语法 1,默认给全表的所有分区 BUILD INDEX
BUILD INDEX index_name ON table_name;
-- 语法 2,可指定 Partition,可指定一个或多个
BUILD INDEX index_name ON table_name PARTITIONS(partition_name1, partition_name2);

-- 通过 SHOW BUILD INDEX 查看 BUILD INDEX 进度

SHOW BUILD INDEX [FROM db_name];
-- 示例 1,查看所有的 BUILD INDEX 任务进展
SHOW BUILD INDEX;
-- 示例 2,查看指定 table 的 BUILD INDEX 任务进展
SHOW BUILD INDEX where TableName = "table1";

-- 通过 CANCEL BUILD INDEX 取消 BUILD INDEX

CANCEL BUILD INDEX ON table_name;
CANCEL BUILD INDEX ON table_name (job_id1,jobid_2,...);

2.3 删除索引

-- 语法 1
DROP INDEX idx_name ON table_name;
-- 语法 2
ALTER TABLE table_name DROP INDEX idx_name;

三、使用倒排索引

3.1 创建带有倒排索引的表

CREATE TABLE tb_test
(
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `comment` String,
    INDEX idx_comment (`comment`) USING INVERTED PROPERTIES("parser" = "chinese", "parser_mode" = "coarse_grained")
)
UNIQUE  KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10
PROPERTIES ("replication_num" = "1");

3.2 插入数据

insert into tb_test(comment) values('我喜欢上班'),('上班使我快乐'),('我喜欢写代码');

3.3利用倒排索引查询

1.全文检索关键词匹配

-- MATCH_ANY 匹配任意一个关键字

select count() from tb_test where comment MATCH_ANY '上班';

-- MATCH_ANY 支持多个关键字,用空格分隔

select count() from tb_test where comment MATCH_ANY '上班 喜欢';

-- MATCH_ALL 同时匹配多个关键字

select count() from tb_test where comment MATCH_ALL '上班 喜欢';

3.4 自定义分词

        Doris的倒排索引会对词组进行分词的,比如“喜欢写代码”,会对其分词为“喜欢”、“写”和“代码”,此时用match_any会匹配到包含这三个词语中任意一个的结果:   “我喜欢上班”和“我喜欢写代码” 。对于某些特定组合如果不想让其进行分词,可以在be/dict/user.dict.utf8中加上这个特定组合,比如我加入“喜欢写代码”这个词组会被视为一个整体,不再对其进行分词。


        注意1.需要重启be生效;2.分词效果只对新插入的数据生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言,为什么呢? 可能很多读者都知道,Python 的解释器是用 C 语言写的,所以其实我们在谈论 “Python” 的时候,99.9% 的情况说的就是 “CPython”! CPython 是目前最流行的…

ROS2创建自定义接口

ROS2提供了四种通信方式: 话题-Topics 服务-Services 动作-Action 参数-Parameters 查看系统自定义接口命令 使用ros2 interface package sensor_msgs命令可以查看某一个接口包下所有的接口 除了参数之外,话题、服务和动作(Action)都支持自定义接口&am…

石墨舟氮气柜的特点和使用要求介绍

石墨舟是一种在半导体、太阳能光伏等高科技产业中广泛使用的专用工具,主要由高纯度石墨材料制成。它的形状通常像一只船,因此得名“石墨舟”。石墨舟主要用于承载硅片或其他基板材料通过各种高温处理过程,是制造半导体器件和太阳能电池片的关…

BLACKBOX.AI:解锁开发新纪元,加速编程学习的AI神器!

文章目录 💯BLACKBOX.AI 官网🍁1 BLACKBOX.AI 工具使用教程🍁2 BLACKBOX.AI工具使用界面介绍🍁3 Chat(聊天)功能🍁4 Explore (探索)功能💎4.1 Terminal(终端)功能💎4.2 Discover(发现)功能&…

Android进阶之路 - DialogFragment有没有了解的必要?

几个月前写到了弹框业务,以前经常用Dialog、ButtomDialog 、popupWindow 组件,为了契合项目结构参考了原有的 DialogFragment 组件,特此予以记录 我一般在项目中写弹框组件的话,主要用到 alertDialog、popupWindow 组件&#xff0…

对于AI最敏感的问题,高盛内部分歧不小,但“即便是泡沫,也会持续很长时间”

展望未来十年,质疑者预测,AI只能将美国生产率提高0.5%,对GDP增长的贡献累计仅为0.9%。乐观分析师则预计,生成式AI最终将自动化25%的工作任务,并推动美国生产率提高9%,GDP增长6.1%。 人工智能信仰下&#xf…

【Proteus仿真】多变循环彩灯

【Proteus仿真】多变循环彩灯 ‍ 01功能描述 10种灯光效果可通过按键进行切换/通过按键切换灯光效果,通过数码管显示当前灯光模式,并通过按键调节当前灯光速度快慢。 02原理图 ​​ ‍ 03资料内容 源码仿真 04资料获取链接 https://docs.qq.co…

MySQL事物

事务的概念 ●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体 一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 ●事务是一个不可分割的工作逻辑单元&#…

Animate源文件修改要注意什么?

最近经常有同学提问,如何对Animate源文件,也就是fla格式文件进行修改,这里简单说一下要注意的内容。 首先是要使用Animate软件打开源文件,要尽量使用完整版本的软件,以免无法正常运行代码。接下来就是要注意的几点&…

fmsbggradar|复现CNS同款雷达图并且加上显著P值

文章目录 前言fmsb数据格式参数调整demo ggradar单样本demo多组demo 实战-给radar添加统计量 前言 雷达图,Radar(也称为蜘蛛图或网络图)是一种二维图表,用于显示多变量数据。每个变量由从中心延伸出来的辐条(或轴&…

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

花了大几万的踩坑经验!宠物空气净化器哪个牌子好:希喂、小米、有哈PK

我的闺蜜最近向我大吐苦水,自从家里养了猫之后,她发现家里的空气质量大不如前。宠物的浮毛和排泄物的气味在空气中飘散,让她非常怀念以前没有养猫时家里清新的呼吸环境。她觉得这些漂浮的毛发和异味大大降低了居家的舒适度。 还引起了身体上…

容器:string

以下是对于string容器常用功能和函数的总结 主要包括 1、定义string 2、字符串赋值 3、字符串拼接:str.append() 4、字符串查找:str.find() / str.rfind() 5、字符串替换:str.replace() 6、字符串长度比较:str.compare…

Quartz定时任务组件

官网:http://www.quartz-scheduler.org/ 1)job - 任务 - 你要做什么事? 2)Trigger - 触发器 - 做什么事,什么时候触发,可以传入任务 3)Scheduler - 任务调度 - 可以传入多个触发器进行任务调…

ASUS/华硕天选Air 2021 FX516P系列 原厂win10系统

安装后恢复到您开箱的体验界面,带原机所有驱动和软件,包括myasus mcafee office 奥创等。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http:…

Transformer教程之序列到序列模型(Seq2Seq)

在自然语言处理(NLP)的领域中,Transformer模型无疑是近年来最具革命性的方法之一。它的出现不仅大大提高了机器翻译、文本生成等任务的精度,还推动了整个深度学习研究的进步。本文将详细介绍Transformer模型中的序列到序列模型&am…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

NVIDIA-NCCL下载资源分享,跳过Authenticator验证

目录 Authenticator进入下载页面Download NCCL 2.22.3, for CUDA 12.5, June 18th, 2024Local installers (x86)Network installers (x86)Local installers (ARM)Network installers (ARM) Download NCCL 2.22.3, for CUDA 12.4, June 18th, 2024Local installers (x86)Network…

如何实现高精度PCB切割?— 在线式激光切割机解决方案

在线式PCB精密激光切割机是一种专门用于电子行业中印刷电路板(PCB)切割的高精度设备。以下是关于在线式PCB精密激光切割机的详细信息和特点: 1. 工作原理: 在线式PCB精密激光切割机主要通过激光束的高能量密度对PCB板进行瞬时加热…

2024年客户体验的几个预测

数字化转型、以客户为中心的理念、数字技术的发展和产品的不断创新,都为客户体验带来了巨大的改变。 目前,我们看到很多公司都在致力于塑造一种以客户为中心的商业模式。企业开始用更多技术、更多数据和更多产品来强化自己在客户体验方面的能力。 那么&a…