我有一个带拉丁语条目的postgresql数据库。这些字母" u"和" v"可以在任何文本中随时替换彼此。
所以,单词" individualue"也可以写成" indiuidue"或" indiuidve"。
如何指示查询(或格式化数据库),以便搜索" individualue"还会返回另外两种可能性吗?
谢谢,
答案 0 :(得分:1)
有几种方法 - 您可以为FTS创建自定义解析器,或者您可以 简单地做一些事情:
create index on base_table
using gin( (to_tsvector(replace(upper(column_to_search),'U','V')))
请记住在所有搜索中执行相同的替换(search_criteria),'U','V')
当然你可以把它变成一个永久不变的函数,它总是将U转换成V的......并且只是在两个地方(索引和搜索时)调用它。这样,你就不必经常写出丑陋的替换......
答案 1 :(得分:0)
一种方法是使用"选择...类似于..."如:
> createdb test
> psql -d test
psql (9.4.9)
Type "help" for help.
test=# create table mytest(thestring varchar(20));
CREATE TABLE
test=# insert into mytest values('individue');
INSERT 0 1
test=# insert into mytest values('indiuidue');
INSERT 0 1
test=# insert into mytest values('indiuidve');
INSERT 0 1
test=# insert into mytest values('indiuidde');
INSERT 0 1
test=# insert into mytest values('indiiidde');
INSERT 0 1
test=# select * from mytest
test-# ;
thestring
-----------
individue
indiuidue
indiuidve
indiuidde
indiiidde
(5 rows)
test=# select * from mytest where thestring similar to '%(u|v)%';
thestring
-----------
individue
indiuidue
indiuidve
indiuidde
(4 rows)
如果这不符合您的目的,那么正则表达式将能够处理更复杂的情况。