我正在尝试将给定的查询词转换为 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 字典,但结果没有变化。
这按预期工作。
英语文本搜索配置使用 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
找到它。