Java,hibernate + oracle。用户存储在数据库中,并在其名称中包含国家字符(ü,ß等)。现在我需要创建一个方便的搜索功能。示例:当用户键入'do','dö'或'doe'时,应找到条目'Fidörner'。目前只有3个规则,如上面的规则由业务定义,但我希望会有更多。
推荐的解决方案是什么?谷歌搜索设备? Lucene的?冬眠搜索? Solr的?自定义文本规范化(可以快速完成)吗?还有其他工具吗?
答案 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