搜索 – H2数据库整理强度:选择什么?

经过大量的阅读和实验,似乎我想要搜索的主要优势,但是需要TERTIARY或IDENTICAL来进行排序.主要问题:H2(或任何其他DB)可以实现吗?

次要问题:我是这里唯一的人还是你们中的任何一个人也喜欢上述组合?一些确认将有助于我的理智.

背景:
似乎只能在创建数据库时从头开始设置排序规则.所以我想确保选择正确的.我主要考虑这些用例(目前):

>一个搜索字段,用户可以开始键入以过滤表:这里PRIMARY似乎是最合适的,以避免遗漏任何结果(用户习惯谷歌……).虽然,能够为用户提供启用二级或三级排序规则以进行更精确搜索的选项会很不错.
>排序:当用户单击表列以对内容进行排序时,TERTIARY / IDENTICAL排序似乎是合适的.这就是我从日常经验中习惯的.

我在这里阅读了官方的H2文档:http://www.h2database.com/html/grammar.html#set_collation.
在这里:http://www.h2database.com/html/datatypes.html#varchar_ignorecase_type
一些更相关的信息:
Collation STRENGTH and local language relation

测试sql(从https://groups.google.com/forum/?fromgroups=#!topic/h2-database/lBksrrcuGdY开始):

drop all objects;
set collation english STRENGTH PRIMARY;
create table test(name varchar);
insert into test values ('À'), ('Ä'), ('Â'), ('A'), ('à'), ('ä'), ('â'), ('a'), ('àa'), ('äa'), ('âa'), ('aa'), ('B'), ('b');
select * from test where name like 'a' order by name;
select * from test order by name;

最佳答案 如果您希望对单个数据有两种行为,则必须:

>将数据拆分为两列,
>或使用两个运算符集.

为了您的目的,通常存储原始数据的“规范”表示,以便搜索规范形式,然后排序/显示原始数据.也许你应该使用一些“文本搜索引擎”,如Apache Lucene.

对于纯H2解决方案,您可以使用H2 aliasComputed columns或查询条件.第一种解决方案允许索引来加速查询.

点赞