gpt4 book ai didi

postgresql - tsvector 只支持英文?

转载 作者:行者123 更新时间:2023-11-29 11:39:16 31 4
gpt4 key购买 nike

我做了以下事情:

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

关于postgresql - tsvector 只支持英文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300874/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com