plainto_tsquery 将给定的单词词干为不正确的根单词。例如:“创建”->“创建”、“计划”->“计划”

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

我正在尝试将给定的查询词转换为 ts_query,我可以在选择查询的 where 条件中使用它。我没有得到查询中的记录,因为这个 plainto_tsquery 给出了英语配置的无效根词。

数据库演示表:

id ts_向量
1 创建:1,测试:2
3 日程:1,测试:2

查询:从演示中选择*,其中ts_vector @@ plainto_tsquery(“english”,“create”)

0 条记录

查询:从演示中选择 *,其中 ts_vector @@ plainto_tsquery("simple","create")

id ts_向量
1 创建:1,测试:2

发现问题出在英文配置的 plainto_tsquery 中,它源于给定的单词,如下所示。因此查询返回 0 条记录,因为 ts_vector 中没有包含给定根词的记录。

select plainto_tsquery("English","create") 

‘创造’

select plainto_tsquery("simple","schedule")

'时间表'

为什么会发生这种情况? “creat”是英语中“创造”的词根吗?我已经更新了 Postgres 字典,但结果没有变化。

java sql postgresql pgadmin-4 tsvector
1个回答
0
投票

这按预期工作。

英语文本搜索配置使用 Snowball 字典

english_stem
来搜索自然语言单词:

\dF+ english

Text search configuration "pg_catalog.english"
Parser: "pg_catalog.default"
      Token      │ Dictionaries 
═════════════════╪══════════════
 asciihword      │ english_stem
 asciiword       │ english_stem
 email           │ simple
 file            │ simple
 float           │ simple
 host            │ simple
 hword           │ english_stem
 hword_asciipart │ english_stem
 hword_numpart   │ simple
 hword_part      │ english_stem
 int             │ simple
 numhword        │ simple
 numword         │ simple
 sfloat          │ simple
 uint            │ simple
 url             │ simple
 url_path        │ simple
 version         │ simple
 word            │ english_stem

Snowball 词典无法理解该语言,因此它可以正确地进行词干提取,但它使用通常足够好的启发式词干提取方法。然而,“creat”是“create”的正确词干:想想“creating”。

如果您使用

tsvector
文本搜索配置创建了
simple
,则不能指望使用使用不同文本搜索配置生成的
tsquery
找到它。

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