创建索引时,Oracle Text使用Base_Letter设置

问题描述

在我的数据库中有一个产品标题。我们需要能够对此进行搜索,以使其对口音不敏感,即搜索“ Dorthey”仍将返回“Dórthéy”。

我们已经在创建Oracle Text索引。将重音字符转换为基本字母的设置称为base_letter,需要将其打开。

这是创建索引的方式。

True AS Active

创建索引时,我是否打开此设置?如何?还是在其他地方启用了base_letter设置?

感谢任何帮助!

解决方法

您必须定义一个BASIC_LEXER,将BASE_LETTER设置为true

如示例所示,您在创建文本索引时使用了BASIC_LEXER

begin
ctx_ddl.create_preference (
'my_lexer','BASIC_LEXER' );
ctx_ddl.set_attribute( 'my_lexer','BASE_LETTER','true' );
end;
/

create table tab as
select 1 id,'schön' txt from dual union all
select 2 id,'schoen' txt from dual union all
select 3 id,'schon' txt from dual union all
select 4 id,'schnix' txt from dual;

create index tab_ttx on tab(txt) indextype is ctxsys.context
parameters ( 'lexer my_lexer' );


select * from tab where contains(txt,'schon')>0;

        ID TXT   
---------- ------
         1 schön 
         3 schon 

请检查此blog post所示的其他参数,例如ALTERNATE_SPELLING和/或OVERRIDE_BASE_LETTER

或者咨询Oracle documentation

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...