用java和oracle搜索国家/多语种字符

时间:2014-01-28 14:42:37

标签: java oracle hibernate search-engine multilingual

Java,hibernate + oracle。用户存储在数据库中,并在其名称中包含国家字符(ü,ß等)。现在我需要创建一个方便的搜索功能。示例:当用户键入'do','dö'或'doe'时,应找到条目'Fidörner'。目前只有3个规则,如上面的规则由业务定义,但我希望会有更多。

推荐的解决方案是什么?谷歌搜索设备? Lucene的?冬眠搜索? Solr的?自定义文本规范化(可以快速完成)吗?还有其他工具吗?

1 个答案:

答案 0 :(得分:0)

看看Oracle Text。这是一个默认安装在您的数据库上的免费选项。

例如:

create table users(name varchar2(100));
insert into users values ('Fidörner');
insert into users values ('Fido');
insert into users values ('Smith');
commit;

begin
  ctx_ddl.drop_preference('mylex');
  ctx_ddl.create_preference('mylex', 'basic_lexer');
  ctx_ddl.set_attribute('mylex', 'base_letter', 'YES');
  ctx_ddl.set_attribute('mylex','alternate_spelling','german');
end;
/

create index users_index on users(name)
indextype is ctxsys.ctxcat  parameters ('LEXER mylex');

select * from users where catsearch(name, '**do*', null) > 0;
select * from users where catsearch(name, '**dö*', null) > 0;
select * from users where catsearch(name, '**doe*', null) > 0;

所有回报:

Name
----
Fidörner
Fido