为什么这个全文搜索在PostgreSQL中不匹配?

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

我正在评估PostgreSQL,看看它是否是ElasticSearch的一个可行的替代方案(以后迁移也可以)。我一直在读PG的全文检索能力现在已经 "足够好 "了。我正在运行11版本。

为什么检测不到匹配?我以为词干会很容易检测到 "大 "字的不同形式。

SELECT to_tsvector('english', 'bigger') @@ to_tsquery('english', 'big')

我是不是用错了配置?

postgresql full-text-search stemming
1个回答
1
投票

你也可以重复使用脚本 英语.sh英语.sqlhttps:/dba.stackexchange.comquestions57058如何使用带有postgres文本搜索的拼写字典?.

我在生成的词典中修改了以下内容 英语.词缀 我已经添加了IG > GER规则。

flag *R:
    E           >       R               # As in skate > skater
    [^AEIOU]Y   >       -Y,IER          # As in multiply > multiplier
    [AEIOU]Y    >       ER              # As in convey > conveyer
    [^EY]       >       ER              # As in build > builder
    IG          >       GER             # For big > bigger

英语.dict 我已经修改了

big/PY

big/PYR

对当前数据库运行english.sql后(需要在脚本中修改数据库名)。

postgres=# select ts_debug('english bigger');
select ts_debug('english bigger');
                                              ts_debug                                              
----------------------------------------------------------------------------------------------------
 (asciiword,"Word, all ASCII",english,"{english_ispell,english_stem}",english_ispell,{english})
 (blank,"Space symbols"," ",{},,)
 (asciiword,"Word, all ASCII",bigger,"{english_ispell,english_stem}",english_ispell,"{bigger,big}")
(3 rows)

postgres=# SELECT to_tsvector('english bigger') @@ to_tsquery('english', 'big');
SELECT to_tsvector('english bigger') @@ to_tsquery('english', 'big');
 ?column? 
----------
 t
(1 row)

0
投票

看来我需要安装一个ispell词典 因为英语词典默认不这样做。

https:/www.postgresql.orgdocscurrenttextsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY

也可以参考这个答案。https:/stackoverflow.coma61213187148390

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