oracle全文索引之停用词的通配符功能

SQL LIKE操作符实战避坑指南:从原理到跨数据库优化 LIKE是SQL中最常用却最易误用的字符串匹配操作符,其本质是触发数据库引擎底层字节级扫描指令,而非简单字符比对。理解%(贪婪跳过)与_(精确字节位移)的执行原理,是规避全表扫描、索引失效和编码错配等性能陷阱的前提。在UTF-8多字节场景下,中文、emoji的字节对齐问题直接导致匹配失败;大小写处理中LOWER()函数会破坏索引,而ILIKE或collation配置才是高效解法。针对'%keyword%'类中缀查询,Trigram(PostgreSQL)与N-gram(MySQL)等工业级索引方案可将耗时从 阅读详情

全文索引停用词的设置在前面的文章中已经介绍过了,这里简单说明记录一下停用词在查询时候需要注意的地方。
Oracle10g中,如果安装语言为中文,默认的LEXER为CHINESE_VGRAM_LEXER,默认的停用词语言也为中文。这篇通过对比中文环境和英文环境来说明停用词查询的一些特点。

SQL> show user
USER is "MYUSER"
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

Table created.

SQL> INSERT INTO T VALUES (1, 'This example test stopword.');

1 row created.

SQL> INSERT INTO T VALUES (2, 'Oracle9i chinese language environment default stopword are english.');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT;

Index created.

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'This') > 0;

no rows selected


英文环境下允许单独查询停用词,但是不会返回结果。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'are english') > 0;

ID DOCS
--- --------------------------------------------------
2 Oracle9i chinese language environment default stop
word are english.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'is english') > 0;

ID DOCS
--- --------------------------------------------------
2 Oracle9i chinese language environment default stop
word are english.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'stopword are english') > 0;

ID DOCS
--- --------------------------------------------------
2 Oracle9i chinese language environment default stop
word are english.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'stopword is english') > 0;

ID DOCS
--- --------------------------------------------------
2 Oracle9i chinese language environment default stop
word are english.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'are stopword') > 0;

ID DOCS
--- --------------------------------------------------
1 This example test stopword.
2 Oracle9i chinese language environment default stop
word are english.

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'are example') > 0;

ID DOCS
--- --------------------------------------------------
1 This example test stopword.


上 面这些查询,由于are、is都是停用词,因此可以认为是一个替代符,代替任何单词。而且查询语句中包含的停用词不仅可以替代文档中本身的停用词,还可以 替代任何有意义的单词,如上面对ARE STOPWORD的查询分别对应了DEFAULT STOPWORD和TEST STOPWORD

。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'stopword english') > 0;

no rows selected

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'default is stopword') > 0;

no rows selected

最后两个查询说明停用词虽然可以替换任何词,但是无论是文档中的停用词还是查询语句中包含的停用词,对必须对应一个单词,如果直接将停用词所在位置的单词忽略掉是不会返回结果的。仅这一点上,停用词有点像通配符“_”。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


下面是中文环境的测试

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

表已创建。

SQL> INSERT INTO T VALUES (1, '这个例子测试停用词');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, 'Oracle10g中文环境默认也是中文');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT;

索引已创建。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '这个') > 0;
SELECT * FROM T WHERE CONTAINS(DOCS, '这个') > 0
*第 1 行出现错误:
ORA-29902: 执行 ODCIIndexStart() 例行程序中出错
ORA-20000: Oracle Text error:
DRG-10817: CONTAINS 搜索词包含禁用词或禁用词的词组: 这个对于中文环境,如果查询只包含停用词,那么查询会报错,这一点和英文环境明显不同。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '也是中文') > 0;

ID DOCS
---------- --------------------------------------------------
2 Oracle10g中文环境默认也是中文

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '就是中文') > 0;

ID DOCS
---------- --------------------------------------------------
2 Oracle10g中文环境默认也是中文

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '还是中文') > 0;

ID DOCS
---------- --------------------------------------------------
2 Oracle10g中文环境默认也是中文

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '不是中文') > 0;

未选定行

由于“也是”、“就是”和“还是”都是停用词,索引查询2到查询4都可以返回结果。但是“不是”不属于停用词,因此,通过不是查询无法返回结果。这个测试和英文停用词的测试很像。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '默认也是中文') > 0;

ID DOCS
---------- --------------------------------------------------
2 Oracle10g中文环境默认也是中文

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '默认就是中文') > 0;

未选定行

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '默认还是中文') > 0;

未选定行

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '默认不是中文') > 0;

未选定行

这次在查询语句中,停用词两边都包含了内容,这时候发现停用词似乎没有起作用,只有全文匹配的查询生效了。感觉是由于中文的切词要比英文复杂,因此不好判断查询短语中是否包含了停用词。


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '环境默认') > 0;

ID DOCS
---------- ----------------------------------------------------------
2 Oracle10g中文环境默认也是中文

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '也是默认') > 0;

未选定行

两个查询也说明了中文和英文环境的不同。中文环境中,查询语句中的停用词似乎只能替换停用词,而不能再替换其他有意义的词汇了。

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '默认中文') > 0;

未选定行


最后一个查询和英文环境一致,停用词必须占一个词的位置。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

Oracle中文全文索引 环境Oracle 9.0.2 Oracle全文索引的基本知识一、历史背景Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的名称是Oracle 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1388

Oracle之索引

索引分类: 一、按照存储形式分 1.B—tree索引 (索引列、原始数据、rowid) 2.位图索引 (位图、rowid) 3.反向键索引 (索引列、原始数据、反向存储、rowid) 4.基于函数的索引 (经过函数处理后的索引列、原始数据、rowid) 二、按照唯一性 1.唯一索引:索引列中不能出现重复数据 2.非唯一索引:索引列中能出现重复数据 三、按照列的个数分 1.单列索引:基于一列建立的索引 2.复合索引:基于多个列建立的索引 建立索引 1.B—tree索引 ..

weixin_42402597的博客 1649

TSMC65nm工艺下Virtuoso仿真gm-id曲线的保姆级教程(含ADE设置详解)

本文提供了一份在TSMC 65nm工艺下使用Cadence Virtuoso绘制gm-id曲线的详细教程。内容涵盖从理解gm/id方法学、搭建仿真环境、深度解析ADE设置,到运行DC仿真、提取数据并生成对数坐标曲线的完整流程。教程重点解析了Virtuoso ADE中的关键设置与常见避坑点,旨在帮助模拟集成电路设计初学者快速掌握这一核心设计工具,为高性能电路设计奠定基础。

grpc6streamer的博客 1172

14、全文检索 -- Elasticsearch -- 管理 Elasticsearch 之 执行全文检索的操作(普通关键字、短语、前缀、通配符、范围查询 以及 根据查询条件删除文档 )

管理 Elasticsearch 之 执行全文检索的操作(普通关键字、短语、前缀、通配符、范围查询 以及 根据查询条件删除文档 )

Java 领域技术分享 1263

Altium Designer 20/21/22/23版本汉化与库管理全攻略(附避坑指南)

本文系统梳理了Altium Designer 20/21/22/23等多个版本的汉化方案与库管理全流程。针对不同版本的中文支持差异,提供了安全的汉化设置指南与版本选择建议。重点详解了原理图库、PCB封装库及集成库的创建、管理与团队协作最佳实践,并附有常见问题避坑指南,帮助硬件工程师高效搭建稳定的设计环境。

rgv234567的博客 1113

测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

测站坐标系统以观测站(或地面上某一个观测点为中心建立坐标系统,将这类坐标系称为测站坐标系统。测站坐标系通常以用户所在的位置点P为坐标原点三个坐标轴分别是相互垂直的东向北向和天向,因而测站坐标系又称为东北天(ENU)坐标系。由于测站坐标系以站心为坐标原点,因此也称为站心坐标系。如图所示,测站坐标系的天向与大地坐标系(LLA经纬度坐标系)在此点的高程方向一致。测站坐标系固定在地球上,本质上是一种地固坐标系。(1)以站心为坐标原点。(2)Z轴与站心点的椭球法线重合,向上为正。

qq_43381998的博客 1万+

全文检索4.5查询语法

一 语法概要 select域名, 域名@Seg from索引库名称 where域名:域值 order by域名(整型、浮点、日期、排序文本类型、枚举类型)limitn classify by域名 (或 merge by域名) lÂselect的域必须是存储域或枚举域。域名后加上@Seg, 表示取包含查询词的片断,可能包含多个片断,用.....

weixin_33859665的博客 255

【生成数据集EXCEL文件】使用生成对抗网络GAN生成数据集:输出生成数据集EXCEL

生成器的任务是接收随机噪声向量作为输入,并尽可能生成与真实数据相似的样本,而判别器则是一个二分类器,旨在区分输入的样本是来自生成器生成的,还是来自真实数据。在训练过程中,生成器和判别器通过对抗学习的方式相互博弈,生成器的目标是生成足以欺骗判别器的样本,而判别器的目标则是尽可能准确地判断样本的真实性。GAN网络在多个领域展现了强大的能力,能够生成与训练数据分布相似的新数据,包括但不限于图像生成、图像风格转换、超分辨率、数据增强、视频生成、自然语言处理、医学图像处理以及游戏与虚拟现实等。

hustef的博客 1521

(21)全文索引与停止词

match(全文索引名)againist(‘keyword’); select * from member where match(intro) against(‘mobility’);停止词:全文索引不针对非常频繁的词做索引,如this,is ,you全文索引:在mysql的默认情况下,对于中文的意义不大? 因为英文有空格,标点符号来拆成单词,进而对单词进行索引,而对于中文,没有空格来隔开单词

FixedStar 的博客 548

四足机器人如何用对抗运动先验(AMP)实现复杂地形行走?Unitree Go1实战解析

本文深入解析了四足机器人Unitree Go1如何通过对抗运动先验(AMP)算法实现复杂地形行走。AMP结合模仿学习与对抗训练,使机器人仅凭本体感知就能适应未知地形。文章详细介绍了AMP的核心架构、仿真训练工程实践以及在Unitree Go1上的部署优化方案,展示了其在极端地形下的卓越性能表现。

weixin_29050513的博客 327

RAP 语义键:让 UUID 世界变得可读、可导航、可校验

RAP 语义键的核心价值与实现要点 语义键(Semantic Key)是 ABAP RAP 模型中连接技术实现与业务体验的关键设计:通过为实体指定一组业务可读的标识字段(如订单号、物料编码等),在保持技术主键(如UUID)不变的同时,显著提升用户界面的可读性和导航体验。 主要优势: 提升UI可读性:Fiori元素会突出显示语义键字段,帮助用户快速识别关键业务数据 改善导航体验:OData URL会使用可读的语义键而非技术ID,便于分享和排查问题 降低沟通成本:业务人员能准确引用有意义的业务标识而非技术ID

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 153

oracle 启动停用索引,oracle全文索引之停用词的通配符功能

全文索引停用词的设置在前面的文章中已经介绍过了,这里简单说明记录一下停用词在查询时候需要注意的地方。Oracle10g中,如果安装语言为中文,默认的LEXER为CHINESE_VGRAM_LEXER,默认的停用词语言也为中文。这篇通过对比中文环境和英文环境来说明停用词查询的一些特点。SQL> show userUSER is "MYUSER"SQL> CREATE TABLE T (I...

weixin_29677553的博客 291

UG NX二次开发(C#)-VS2022配置NX二次开发模板不能正常显示的问题

随着VS2022的发布,使用VS2022进行UG NX二次开发的人员也会越来越多,但是由于VS2022和以前的VS版本采用代码结构不同,而UG NX的二次开发编程模板还没有适应于VS2022的模板配置,所以不能正常的创建一个完整的工程。本文采用曲线救国的方式来实现VS2022下的UG NX二次开发。如果有读者能很好的解决模板配置,不吝赐教。

GimiGimmy 4274

Oracle Text(全文索引)

Oracle 全文索引 前言:        Oracle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在Oracle8.0.x中称为ConText ;在Oracle8i中称为interMedia Text ; Oracle9i中称为Oracle Tex

rudy gao 2149

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 839

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Oracle 全文索引

Oracle 全文索引 前言: Oracle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在Oracle8.0.x中称为ConText ;在Oracle8i中称为interMedia Text ; Oracle9i中称为Oracle Tex...

weixin_30539835的博客 187

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL 5.6全文检索实战:解决LIKE慢查与中文搜索难题

全文检索是一种基于倒排索引的高效文本匹配技术,其核心原理是分词→过滤→归一化→构建词元到文档ID的映射,再通过TF-IDF等算法实现相关性排序。相比传统LIKE全表扫描,它能将模糊查询性能提升百倍,显著降低CPU负载和响应延迟。该技术在电商商品搜索、新闻标题检索、后台运营系统等需要高并发关键词匹配的场景中具有关键价值。本文聚焦MySQL 5.6在Ubuntu 16.04环境下的落地实践,重点解决LIKE性能瓶颈和中文分词失效两大痛点,结合jieba预分词、布尔模式精准控制、索引调优等工程方案,提供零外部依赖

weixin_34090562的博客 434

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Oracle全文检索方面的研究(全)

<br /> <br /> <br /> <br />http://chaoji-liangbin.blog.163.com/blog/static/252392122010915101351354/<br /> <br /> <br />参考百度文档:<br />http://wenku.baidu.com/view/c53e9e36a32d7375a417801a.html<br /> <br /> <br />1、准备流程         <br /> <br />1.1检查和设置数据库角色<br /

liangbinny的专栏 2679

oracle索引注意事项,oracle 常用索引分析,使用原则和注意事项

本文参考:索引简介•索引(index)是数据库对象的一种。索引的关键在于通过一组排序后的物理地址作为键来取代默认的全表扫描检索方式,就像为书本添加目录,通过牺牲物理内存的方式提高数据的检索效率。•它对用户时透明的,它的创建不会影响对表的sql操作。索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引。•oracle创建主键时会自动创建索引添加...

weixin_36434967的博客 598

通过案例学调优之--Oracle 全文索引

通过案例学调优之--Oracle 全文索引全文检索(oracle text) Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是 Oracle9i 采用的新名称,在 oracle8/8i 中被称为 oracle intermedia text,oracle8 以前是 oracle context ca...

weixin_34050519的博客 362

oracle全文索引(全文检索)的介绍,使用和创

全文索引 Oracle的全文检索实现逻辑,通过lexer词法分析器,讲把值的term找出来。记录在一组的DR$开头的表里面(主要是DR$xxxI表),主要记录term的位置,frequency频率,hash等信息,oracle根据谓词,找到对应的term。 主要介绍三种自然语言的分析器 basic_lexer(默认的分析器): 主要针对英语。有较高的处理效率,因为它只认空格和标点,所以

weeknd的博客 2万+

Oracle全文索引使用方法

接近千万数据表中有个name字段,存放中文名称,现在需要根据name字段模糊匹配查询数据,一般的做法是对name字段建立b*tree索引,查询用like'%name%',但是经过测试,这种写法没有走索引,而是全表扫描,可想而知性能有问题。所以采用了Oracle提供的全文索引技术,下面详细介绍下如何使用全文索引。 相关阅读: 由Oracle索引来理解ArcSDE索引 http:/

happydecai的博客 1323

oracle 全文检索实践

  前段时间,项目中需要有一个实时检索数据的方案,并说明不是用数据库模糊查询关键字like,而是像baidu那样的搜索效果,做到最大匹配。并提示我看一下lucene。 我自己去的熟悉了下lucene,然后写了个demo,但他们说为了一个简单的查询检索,确引入了一个lucene,有点不划算。所以让我找其他的解决办法。 我找呀找,居然找到了select * from T where c...

yupengcc的专栏 530

oracle全文索引之LEXER

介绍完Oracle全文索引的FILTER属性,继续介绍Oracle的LEXER属性。 Oracle全文索引的LEXER属性用于处理各种不同的语言。最基本的英文使用BASE_FILTER,而如果需要使用中文则可以使用CHINESE_VGRAM_LEXER或CHINESE_LEXER。这篇文章简单说明BASIC_LEXER属性。BASIC_LEXER属性支持多种语言,比

乐敏@技术驿站 1522
上一篇: oracle全文索引之STOPLIST_ CTXCAT 索引_INDEX SET
下一篇: 不错的关于Oracle 全文索引的文章
leminsky
博客等级 码龄22年 43粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值