我正在评估PostgreSQL,看看它是否是ElasticSearch的一个可行的替代方案(以后迁移也可以)。我一直在读PG的全文检索能力现在已经 "足够好 "了。我正在运行11版本。
为什么检测不到匹配?我以为词干会很容易检测到 "大 "字的不同形式。
SELECT to_tsvector('english', 'bigger') @@ to_tsquery('english', 'big')
我是不是用错了配置?
你也可以重复使用脚本 英语.sh 和 英语.sql 从 https:/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)
看来我需要安装一个ispell词典 因为英语词典默认不这样做。
https:/www.postgresql.orgdocscurrenttextsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY
也可以参考这个答案。https:/stackoverflow.coma61213187148390