忽略Oracle文本索引中的阿拉伯变音符号

问题描述 投票:0回答:1

在Oracle Database 12c R2中,我主要存储阿拉伯文本,并使用oracle文本进行CONTAINS搜索。

在阿拉伯语中,某些不同的字符可以互换使用,并且在搜索时应同等对待。

Ex1:以下字符(أ-إ-آ-ا)应被视为相同。

Ex2:每个字符组也应被视为相同(ي-ى),(ة-ه)。

此外,变音符号(也称为Tashkeel)应被忽略。

Ex3:(َ-ً-ُ-ِ-ٍ-ّ-ْ-ـ)都应忽略。

[当我使用Auto_Lexer并将语言属性设置为阿拉伯语(或使用Basic_Lexer)并启用BASE_LETTER时,第一个示例中的字符组将被同等对待,但是这些设置不会改变Ex2和Ex3中字符组的行为。] >

是否有一种方法可以调整和扩展此base_letter转换,以实现与Ex1中相同的行为,或者任何其他不包括修改插入文本的解决方案。

这里是一个代码示例:

Create Table DOCUMENT(SUBJECT VARCHAR2(4000 CHAR));

begin
 ctx_ddl.create_preference('my_lexer','AUTO_LEXER');
 ctx_ddl.set_attribute('my_lexer','language','ARABIC');
 ctx_ddl.set_attribute('my_lexer','base_letter','YES');
end;
/


insert into DOCUMENT(SUBJECT) VALUES ('السيد أحمد')  ;
insert into DOCUMENT(SUBJECT) VALUES ('سيادة القاضي')  ;
commit;


create index IX_FULLTEXT_SUBJECT on DOCUMENT (SUBJECT)
  indextype is CTXSYS.CONTEXT
  parameters('SYNC(ON COMMIT) lexer my_lexer');


select * from DOCUMENT  where contains(SUBJECT,'احمد') > 0 ; -- this will return a result
select * from DOCUMENT  where contains(SUBJECT,'القاضى') > 0; -- this won't return a result

注意:我将NLS_LANG设置为“ ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256”

并预先感谢。

编辑:我已经尝试过base_letter_type属性,但没有使用

ctx_ddl.set_attribute('my_lexer','base_letter_type','SPECIFIC');

在Oracle Database 12c R2中,我主要存储阿拉伯文本,并使用oracle文本进行CONTAINS搜索。在阿拉伯语中,某些不同的字符可以互换使用,当...

oracle oracle12c oracle-text
1个回答
0
投票

BASE_LETTER_TYPE设置设为SPECIFIC。其默认设置GENERIC将不应用特定于语言的规则。

© www.soinside.com 2019 - 2024. All rights reserved.