Doris:倒排索引

目录

一、倒排索引介绍

二、倒排索引语法

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.mzph.cn/web/35916.shtml

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

相关文章

FFMpeg rtmp 推送本地yuv文件

可以借鉴的&#xff1a;C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址&#xff1a;YUV Sequences 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> extern "C" { #include "libav…

Node.js实验指南:完善接口服务器

上一章接口服务器&#xff0c;我们实现了一个异常简单的接口服务器。可能很多人会感觉有点不真实的感觉&#xff0c;接口这么简单吗&#xff1f;没错&#xff0c;就这么简单。 我们在真实项目的前后端对接中&#xff0c;调用接口&#xff0c;拿到数据&#xff0c;就是如此而已…

文心一言 VS 讯飞星火 VS chatgpt (291)-- 算法导论21.3 4题

四、假设想要增加一个 PRINT-SET(x) 操作&#xff0c;它是对于给定的结点 x 打印出 x 所在集合的所有成员&#xff0c;顺序可以任意。如何对一棵不相交集合森林的每个结点仅增加一个属性&#xff0c;使得 PRINT-SET(x) 所花费的时间同 x 所在集合元素的个数呈线性关系&#xff…

金顺心贸易有限公司简介

金顺心贸易有限公司成立于2015年&#xff0c;注册地位于风景如画的广西壮族自治区防城港市东兴市。 金顺心贸易如他们的名字一样&#xff0c;有着实实在在的业绩和口碑的。他们专注于国际贸易&#xff0c;主营越南进口食品&#xff1a;果汁饮料、春卷皮、调味品、汤底、米粉、…

定制聚四氟乙烯架子离心管架子消解管样品架

南京瑞尼克定制离心管架子、消解管架子、微波罐架子等&#xff0c;各种实验室所需器皿样品架。 我司聚四氟乙烯架子优势&#xff1a; 1.耐强腐蚀&#xff08;耐各种强酸强碱和有机溶剂&#xff09; 2.耐高低温&#xff1a;-200至250℃ 3.工艺精制&#xff0c;尺寸&#xff0…

算法设计与分析--考试真题

分布式算法试题汇总选择题简答题算法题 2013级试题2019级试题2021年秋考卷 根据考试范围找相应题目做。 分布式算法试题汇总 选择题 下述说法错误的是___ A 异步系统中的消息延迟是不确定的 B 分布式算法的消息复杂性是指在所有合法的执行上发送消息总数的最大值 C 在一个异步…

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

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

git修改文件名称提交

要将Git中的修改文件名称的操作提交&#xff0c;需要按照以下步骤进行&#xff1a; 1. 使用命令行或Git GUI工具打开项目所在的目录。 2. 通过git status命令检查当前的工作状态&#xff0c;确保没有未提交的更改。 3. 使用git mv命令修改文件名称&#xff0c;该命令用于移动…

MessageBox 弹框确定延时

异常描述&#xff1a; MessageBox 弹框确定和取消执行不同操作时&#xff0c;完全加载需要一些时间&#xff0c;如果点击确定过快&#xff0c;可能导致执行错误的操作&#xff0c;可通过设置延时解决 以下设置只能点击确定和取消&#xff0c;没有关闭按钮&#xff0c;Esc健无效…

新手必备!短视频剪辑常用的18个技巧——剪映篇

导入素材&#xff1a;这里我们可以选择自己拍摄好的素材&#xff08;图片、视频或录制好的音频&#xff09;&#xff0c;按照顺序导入剪辑区剪辑。这一步是剪辑的基础&#xff0c;确定剪辑的大体思路与成片框架&#xff01;别忽略了&#xff0c;剪映官方素材库提供的素材&#…

私域流量的深度解析与电商应用

一、私域流量的核心价值 在当今数字化时代&#xff0c;流量成为了企业发展的重要资源。与公域流量相比&#xff0c;私域流量以其独有的私有性和可复用性&#xff0c;为企业提供了与用户建立深度联系的机会。私域流量不仅有助于企业精准触达目标用户&#xff0c;还能通过数据分…

python办公自动化之excel

用到的库&#xff1a;openpyxl 实现效果&#xff1a;读取单元格的值&#xff0c;写入单元格 代码&#xff1a; import openpyxl # 打开现有工作簿 workbookopenpyxl.load_workbook(现有工作簿.xlsx) # 选择一个工作表 sheetworkbook[交易表] # 读取单元格的值 cell_valueshe…

Sentinel如何使用BlockExceptionHandler实现限流/降级错误页面显示

1、修改配置项,打开对Spring MVC端点的保护 spring.cloud.sentinel.filter.enabled=true 2、编写 BlockExceptionHandler的实现类 MyUrlBlockHandler.java package com.codex.terry.sentinel.urlblockhandler;/*** 文件名称: MyUrlBlockHandler.java* 编写人: yh.zeng* 编…

微服务初识(一)

目录 1.什么是微服务&#xff1f;2.为什么出现微服务&#xff1f;2.1微服务的出现与发展2.2 系统架构的演变2.2.1 传统开发模式——单体架构2.2.2分布式架构2.2.3 微服务架构2.2.4 小结 3. 如何实现微服务&#xff1f;3.1 微服务开发3.2 微服务容器镜像构建3.3 微服务容器镜像管…

nginx更新https/ssl证书的步骤

一、上传nginx证书到服务器 上传步骤略。。。 二、更新证书 &#xff08;一&#xff09;确认nginx的安装目录 我这里的环境是/etc/nginx/ &#xff08;二&#xff09;确认nginx的证书目录 查看/etc/nginx/nginx.conf&#xff0c;证书目录就在/etc/nginx目录下 将新的证书tes…

甄选版“论软件系统架构评估”,软考高级,系统架构设计师

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…

一名HR,在招聘嵌入式开发岗位,为什么感觉一年比一年难?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 1.嵌入式学用不一致, 高…

OPENCV清晰度判断(三)

接上篇&#xff1a; 信息熵 我还尝试了使用信息熵的方式&#xff1a; 图像也可以采用信息熵的方式来计算图像中的信息多少。 基本概念&#xff1a;图像信息熵是一种特征的统计形式&#xff0c;反映了图像中平均信息量的多少。它表示图像灰度分布的聚集特征所包含的信息量。…

守护Perl代码的圣域:代码安全性与沙箱执行深度解析

守护Perl代码的圣域&#xff1a;代码安全性与沙箱执行深度解析 在软件开发中&#xff0c;代码安全性是一个至关重要的议题&#xff0c;特别是当涉及到执行外部代码或在多用户环境中运行脚本时。Perl&#xff0c;作为一种灵活的脚本语言&#xff0c;提供了多种机制来增强代码的…

Vue.js 全面解析:从基础到实践案例

引言&#xff1a; Vue.js 是一款轻量级且高效的前端框架&#xff0c;以其简洁的API和强大的功能&#xff0c;迅速成为了现代Web开发的热门选择。本文将深入浅出地介绍Vue.js的基础知识&#xff0c;并通过实际案例展示其核心属性的应用&#xff0c;帮助开发者快速掌握Vue.js的精…