PostgreSQL上的全文搜索

时间:2013-08-11 17:31:26

标签: sql postgresql full-text-search postgresql-9.2

现在我正在学习PostgreSQL 9.2.3中的全文搜索。但是,我有一个问题。我运行这个例子:

CREATE TABLE messages (title text,body text,tsv tsvector);

CREATE TRIGGER tsvectorupdate 
BEFORE INSERT OR UPDATE ON messages FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(tsv, 'pg_catalog.english', title, body);

INSERT INTO messages VALUES('title here', 'the body text is here');

不幸的是,之后:

SELECT title, body FROM messages WHERE tsv @@ to_tsquery('title & body')

我没有得到结果 - 返回了0行。你能告诉我为什么吗?根据PostgreSQL的文档,它应该可以工作。

只有'titl'和'bodi'作为查询才能得到合适的结果。为什么呢?

1 个答案:

答案 0 :(得分:10)

只有一个参数的

to_tsquery使用默认的文本搜索配置,在您的情况下看起来不是英文。

您可以使用带有显式文本配置的表单来获得预期结果:

SELECT title, body FROM messages
  WHERE tsv @@ to_tsquery('english', 'title & body')

在SQL中使用SHOW default_text_search_config查看有效的文本配置,并SET default_text_search_config TO 'english'将其更改为英语。