全文搜索postgresql:如何替换2个字母

时间:2017-01-24 07:13:01

标签: postgresql

我有一个带拉丁语条目的postgresql数据库。这些字母" u"和" v"可以在任何文本中随时替换彼此。

所以,单词" individualue"也可以写成" indiuidue"或" indiuidve"。

如何指示查询(或格式化数据库),以便搜索" individualue"还会返回另外两种可能性吗?

谢谢,

2 个答案:

答案 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)

如果这不符合您的目的,那么正则表达式将能够处理更复杂的情况。