尝试按照以下步骤实现postgresql全文搜索示例;
我创建了一个表:
CREATE TABLE posts
(
id serial primary key,
content varchar(255),
tags varchar(255),
title varchar(255)
);
将表格更改为具有TSVECTOR
类型的列ALTER TABLE posts ADD COLUMN searchtext TSVECTOR;
创建了一个触发器,用于在searchtext列中存储数据:
CREATE TRIGGER ts_searchtext BEFORE INSERT OR UPDATE ON posts FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('searchtext', 'english', 'title', 'content', 'tags')
我插了一行:
insert into posts(content,tags,title) values('once upon a time I had a fat friend','friend, fat','Fat Boy');
searchtext列下的值为:
"'boy':2 'fat':1,10,13 'friend':11,12 'time':6 'upon':4"
现在,当我运行查询时:
SELECT * FROM posts where searchtext @@ to_tsquery('english','fot');
返回0行。
所以,基本上我正在寻找一个解决方案,其中“fot”应该与“fat”相匹配,或者我们可以说根据匹配的字母搜索结果。
或者如果我们运行:
SELECT * FROM posts where searchtext @@ to_tsquery('english','frend');
它应与“朋友”匹配。根据postgresql的文档,我认为它将在字典的帮助下完成。但现在确定我应该使用哪个.dict和.affix文件。任何人都可以帮助我更多地了解这一点。
答案 0 :(得分:0)
尝试使用plainto_tsquery函数:
SELECT * FROM posts WHERE searchtext @@ plainto_tsquery('english frend');