问题描述
在我的数据库中有一个产品标题。我们需要能够对此进行搜索,以使其对口音不敏感,即搜索“ 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