加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – tsvector只支持英文?

发布时间:2020-12-13 15:57:36 所属栏目:百科 来源:网络整理
导读:我做了以下事情: ALTER TABLE blog_entry ADD COLUMN body_tsv tsvector;CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON blog_entry FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(body_tsv,'pg_catalog.english',body);CREATE INDE
我做了以下事情:

ALTER TABLE blog_entry ADD COLUMN body_tsv tsvector;

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

CREATE INDEX blog_entry_tsv ON blog_entry USING gin(body_tsv);

UPDATE blog_entry SET body_tsv=to_tsvector(body);

现在这个工作:

SELECT title FROM blog_entry WHERE body_tsv @@ plainto_tsquery('hello world');

但是当试图搜索非英文文本时,它根本不起作用(没有结果).

我使用的是v9.2.2

请帮忙.

解决方法

我玩这个已经有一段时间了,但你需要用正确的语言创建ts_vector,而不是ts_query.

因此,当您更新表时,请使用:

UPDATE blog_entry SET body_tsv=to_tsvector('german',body);

您还可以扩展功能并使用ispell字典来更好地阻止文本搜索引擎(尽管它仍然不会像Solr那样复杂)

为此,请下载例如ISPELL字典.包含在OpenOffice German dictionary中

.oxt文件实际上是.zip文件,因此您只需提取其内容即可.

然后将文件de_DE_frami.dic复制到PostgreSQL“share / tsearch_data”目录,同时将扩展名更改为.dict(这是PostgreSQL所期望的.

然后将文件de_DE_frami.aff复制到同一目录,将扩展名更改为.affix.

您需要将两个(文本)文件转换为UTF-8才能使它们与PostgreSQL一起使用

然后使用以下方

CREATE TEXT SEARCH CONFIGURATION de_config (copy=german);

CREATE TEXT SEARCH DICTIONARY german_stem (
    TEMPLATE = snowball,Language = german
);

CREATE TEXT SEARCH DICTIONARY german_ispell (
    TEMPLATE = ispell,dictfile = de_DE_frami,afffile = de_de_frami
);

alter text search configuration de_config 
     alter mapping for asciiword WITH german_ispell,german_stem;

完成后,您可以使用以下命令创建ts_vector:

UPDATE blog_entry SET body_tsv=to_tsvector('de_config',body);

这也在手册中描述:http://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读