Postgresql使用自定义停用词列表创建搜索配置

问题描述 投票:0回答:1

对于特定的全文搜索,我需要修改标准的停用词文件并排除一些单词。到目前为止我做了什么:

german.stop复制到german_modified.stop然后从german_modified.stop删除了这些词。然后:

CREATE TEXT SEARCH DICTIONARY public.german_nostop (
   TEMPLATE = pg_catalog.simple,
   STOPWORDS = german_modified
);

CREATE TEXT SEARCH CONFIGURATION public.german_nostop (
   COPY = pg_catalog.german
);

ALTER TEXT SEARCH CONFIGURATION public.german_nostop
   ALTER MAPPING
      FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word
      WITH german_nostop;

CREATE INDEX body_idx ON comments
   USING gin (to_tsvector('german_nostop', body));

但是,当我这样做

SELECT body, autor
FROM comments
WHERE to_tsvector('german_nostop', body) @@ to_tsquery('wie');

我明白了:

NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
 body | autor
------+-------
(0 rows)

'wie'是我从修改后的停用词列表中删除的单词。出于某种原因,PostgreSQL没有使用新的停止列表。我真的不想修改原件,因为我确实想要使用原件进行其他搜索。

postgresql full-text-indexing
1个回答
0
投票

您忘了将文本搜索配置添加到to_tsquery调用中。

你应该写:

to_tsquery('german_nostop', 'wie')

to_tsquery也删除了停用词,因为它默认使用了german配置,所以删除了'wie'

如果希望新文本搜索配置为默认设置,可以将default_text_search_config设置为german_nostop

© www.soinside.com 2019 - 2024. All rights reserved.