在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搜索。在阿拉伯语中,某些不同的字符可以互换使用,当...
将BASE_LETTER_TYPE
设置设为SPECIFIC
。其默认设置GENERIC
将不应用特定于语言的规则。