FTS 使用字典来规范化文本:
12.6。字典
字典用于消除不应在搜索中考虑的单词(停用词),并规范化单词,以便相同单词的不同派生形式匹配。成功规范化的词称为词素。
因此,字典被用来丢弃那些在搜索中太常见或无意义的东西(停用词),并规范化其他所有内容,例如city和city将匹配,即使它们是不同的词。
让我们看看一些输出ts_debug
,看看字典发生了什么:
=> select * from ts_debug('english', 'mortgage');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+----------+----------------+--------------+-----------
asciiword | Word, all ASCII | mortgage | {english_stem} | english_stem | {mortgag}
=> select * from ts_debug('simple', 'mortgage');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+----------+--------------+------------+------------
asciiword | Word, all ASCII | mortgage | {simple} | simple | {mortgage}
请注意,simple
使用simple
字典而english
使用english_stem
字典。
simple
字典:_
通过将输入标记转换为小写并根据停用词文件检查它来进行操作。如果在文件中找到它,则返回一个空数组,导致令牌被丢弃。如果不是,则返回单词的小写形式作为规范化的词素。
simple
字典只是抛出停用词、小写字母,仅此而已。我们自己可以看到它的简单性:
=> select to_tsquery('simple', 'Mortgage'), to_tsquery('simple', 'Mortgages');
to_tsquery | to_tsquery
------------+-------------
'mortgage' | 'mortgages'
simple
字典太简单了,甚至无法处理简单的复数。
那么这本english_stem
词典到底是关于什么的呢?“词干”后缀是一个赠品:这本词典将词干算法应用于单词,以将(例如)城市和城市转换为相同的事物。来自精美手册:
12.6.6。雪球词典
Snowball 词典模板基于 Martin Porter 的一个项目,Martin Porter 是流行的 Porter 英语词干算法的发明者。[...] 每个算法都了解如何将常见的单词变体形式简化为其语言中的基本拼写或词干拼写。
就在下面,我们看到了english_stem
字典:
CREATE TEXT SEARCH DICTIONARY english_stem (
TEMPLATE = snowball,
Language = english,
StopWords = english
);
所以english_stem
字典中的词干,我们可以看到发生这种情况:
=> select to_tsquery('english', 'Mortgage'), to_tsquery('english', 'Mortgages');
to_tsquery | to_tsquery
------------+------------
'mortgag' | 'mortgag'
执行摘要:'simple'
意味着简单的文字匹配,'english'
将词干应用于(希望)产生更好的匹配。阻止将抵押贷款变成抵押贷款,这为您提供了匹配。