词典概述
词典用于定义停用词(stop words),即全文检索时不搜索哪些词。
词典还可以用于对同一词的不同形式进行规范化,这样同一个词的不同派生形式都可以进行匹配。规范化后的词称为词位(lexeme)。
除了提高检索质量外,词的规范化和删除停用词可以减少文档tsvector格式的大小, 从而提高性能。词的规范化和删除停用词并不总是具有语言学意义,用户可以根据应用环境在词典定义文件中自定义规范化和删除规则。
一个词典是一个程序,接收标记(token)作为输入,并返回:
-
如果token在词典中已知,返回对应lexeme数组(注意,一个标记可能对应多个lexeme)。
-
一个lexeme。一个新token会代替输入token被传递给后继词典(当前词典可被称为过滤词典)。
-
如果token在词典中已知,但它是一个停用词,返回空数组。
-
如果词典不能识别输入的token,返回NULL。
openGauss提供了多种语言的预定义字典,同时提供了五种预定义的词典模板,分别是Simple、Synonym、Thesaurus、Ispell和Snowball,可用于创建自定义参数的新词典。
在使用全文检索时,建议用户:
-
可以在文本搜索配置中定义一个解析器,以及一组用于处理该解析器的输出标记词典。对于解析器返回的每个标记类型,可以在配置中指定不同的词典列表进行处理。当解析器输出一种类型的标记后,在对应列表的每个字典中会查阅该标记,直到某个词典识别它。如果它被识别为一个停用词, 或者没有任何词典识别,该token将被丢弃,即不被索引或检索到。通常情况下,第一个返回非空结果的词典决定了最终结果,后继词典将不会继续处理。但是一个过滤类型的词典可以依据规则替换输入token,然后将替换后的token传递给后继词典进行处理。
-
配置字典列表的一般规则是,第一个位置放置一个应用范围最小的、最具体化定义的词典,其次是更一般化定义的词典, 最后是一个普适定义的词典,比如Snowball词干词典或Simple词典。在下面例子中,对于一个针对天文学的文本搜索配置astro_en,可以定义标记类型asciiword(ASCII词)对应的词典列表为:天文术语的Synonym同义词词典, Ispell英语词典和Snowball 英语词干词典。
openGauss=# ALTER TEXT SEARCH CONFIGURATION astro_en ADD MAPPING FOR asciiword WITH astro_syn, english_ispell, english_stem;
过滤类型的词典可以放置在词典列表中除去末尾的任何地方,放置在末尾时是无效的。使用这些词典对标记进行部分规范化,可以有效简化后继词典的处理。