提问人:okzoomer 提问时间:11/16/2023 最后编辑:okzoomer 更新时间:11/16/2023 访问量:37
Postgres 中神奇的错别字校正器?
magical typo corrector in postgres?
问:
我在理解PostgreSQL文档时遇到了一些困难。显然,该示例是文本搜索与“caterpiler”相似(?)的单词。示例摘自文档 41.3。下面复制了相关查询。具体化的视图部分不是问题的核心。
CREATE EXTENSION file_fdw;
CREATE SERVER local_file FOREIGN DATA WRAPPER file_fdw;
CREATE FOREIGN TABLE words (word text NOT NULL)
SERVER local_file
OPTIONS (filename '/usr/share/dict/words');
-- previously established that foreign table "words"
-- contains zero counts of 'caterpiler'
SELECT word FROM words ORDER BY word <-> 'caterpiler' LIMIT 10;
-- output
/*
word
---------------
cater
caterpillar
Caterpillar
caterpillars
caterpillar's
Caterpillar's
caterer
caterer's
caters
catered
(10 rows)
*/
解释分析
Limit (cost=11583.61..11583.64 rows=10 width=32) (actual time=1431.591..1431.594 rows=10 loops=1)
-> Sort (cost=11583.61..11804.76 rows=88459 width=32) (actual time=1431.589..1431.591 rows=10 loops=1)
Sort Key: ((word <-> 'caterpiler'::text))
Sort Method: top-N heapsort Memory: 25kB
-> Foreign Scan on words (cost=0.00..9672.05 rows=88459 width=32) (actual time=0.057..1286.455 rows=479829 loops=1)
Foreign File: /usr/share/dict/words
Foreign File Size: 4953699
Planning time: 0.128 ms
Execution time: 1431.679 ms
我假设它正在使用语法,但它在此查询中是如何工作的,以及它如何产生输出顺序?此外,在 EXPLAIN ANALYZE 中,是否只是计划器默认将所有字符串视为,或者这是否意味着正在使用其他定义?word <-> 'catepiler'
tsquery <-> tsquery
'caterpiler'::text
text
<->
此外,是否正在查找字典和/或同义词库,或者这是 ?文件路径确实看起来像字典,但似乎没有这样使用。<->
谢谢
答:
2赞
jjanes
11/16/2023
#1
我假设单词 <-> 'catepiler' 使用的是 tsquery <-> tsquery 语法
不,它使用的是 pg_trgm 的运算符。如果pg_trgm不存在,则会出现错误。text <-> text
此外,EXPLAIN ANALYZE 中的 'caterpiler'::text 是否只是计划器默认将所有字符串视为文本,或者这是否意味着正在使用 <-> 的其他定义?
后者,正在使用不同的定义。
文件路径确实看起来像字典,但似乎没有这样使用。
它是单词列表,在日常含义上并不是真正的字典,但这就是该文件的名称。请注意,该示例只是使用一个通常存在于类 UNIX 系统上的文件。该文件及其名称选择都不是 PostgreSQL 的一部分。这只是一个方便的东西,可以在示例中使用。
评论
0赞
okzoomer
11/16/2023
总而言之,谢谢,因为未知类型的字符串默认为 ,模块的重新定义运算符优先,它会进行一些字符比较(使用卦象等)?text
1赞
jjanes
11/16/2023
列“word”被明确定义为文本类型,所以我认为默认值不一定在这里起作用。运算符查找是针对的,并且仅与 pg_trgm 中的运算符兼容,此时它知道字面上的“catepillar”也需要为文本类型并对其进行标记。text <-> unknown
<->
0赞
okzoomer
11/16/2023
啊,是的,我忘了......太沉迷于选角了。再次感谢!花了相当长的时间没有找到这个文本<>文本运算符,所以你指出它真是太好了。text
评论