在PostgreSQL中为ts_vector标记HTML文本

时间:2019-04-11 23:11:07

标签: postgresql full-text-search tokenize tsvector

Elasticsearch中有一个特殊功能:https://www.elastic.co/guide/en/elasticsearch/guide/master/char-filters.html#_tokenizing_html

我正在寻找一种在Postgresql中执行相同操作的方法。基本上,将HTML转换为纯文本(通过删除HTML标签,取消转义所有转义的字符等),然后创建tsvector。

目前,这是我的幼稚尝试,不会使任何事情脱颖而出:

CREATE TABLE test(
    body text
);

CREATE FUNCTION strip_tags(TEXT) RETURNS TEXT AS
$$
SELECT regexp_replace($1, '<[^>]*>', '', 'g')
$$ LANGUAGE SQL;

CREATE INDEX ON test USING gin(to_tsvector('english', strip_tags(body)));

很明显,一个简单的解决方案是让客户端发送一个冗余的纯文本版本并将其保存为单独的列...但是还有更好的方法吗?

0 个答案:

没有答案