SQL
大壮十二
这个作者很懒,什么都没留下…
展开
-
GBase 8c 词典测试
函数ts_lexize用于进行词典测试。语法为:ts_lexize(dict regdictionary, token text) returns text[]如果输入的token可以被词典识别,那么ts_lexize返回词素的数组;如果token可以被词典识别但它是一个停用词,则返回空数组;如果是一个不可识别的词则返回NULL。例如:SELECT ts_lexize('english_stem', 'stars'); ts_lexize------...原创 2022-02-16 09:41:37 · 554 阅读 · 0 评论 -
GBase 8c 词典-分类词典使用
使用TZ词典:ts_lexize函数对于测试TZ词典作用不大,因为该函数是按照单个token处理输入。可以使用plainto_tsquery、to_tsvector、to_tsquery函数测试TZ词典,这些函数能够将输入分解成多个token(to_tsquery函数需要将输入加上引号)。SELECT plainto_tsquery('supernova star');plainto_tsquery-----------------'sn'SELECT to_t...原创 2022-02-16 09:33:17 · 562 阅读 · 0 评论 -
GBase 8c 词典-分类词典创建(二)
可以在配置中把分类词典thesaurus_simple绑定到想要的记号类型上,例如:ALTER TEXT SEARCH CONFIGURATION russianALTER MAPPING FOR asciiword, asciihword, hword_asciipartWITH thesaurus_simple;以创建名为thesaurus_astro的TZ词典为例:创建一个简单的天文学词典thesaurus_astro,其中定义了两组天...原创 2022-02-16 09:32:59 · 525 阅读 · 0 评论 -
GBase 8c 词典-分类词典创建
使用thesaurus模板创建新的分类词典:CREATE TEXT SEARCH DICTIONARY thesaurus_simple (TEMPLATE = thesaurus,DictFile = mythesaurus,Dictionary = pg_catalog.english_stem);其中:thesaurus_simple是新词典的名称; mythesaurus是分类词典配置文件的基础名称(全名为$SHAREDIR/t...原创 2022-02-16 09:27:32 · 455 阅读 · 0 评论 -
GBase 8c 词典-分类词典概念
分类(Thesaurus)词典(缩写为TZ),是一组定义了词以及词组间关系的集合,包括广义词(BT)、狭义词(NT)、首选词、非首选词、相关词等。根据词典文件中的定义,TZ词典用一个指定的短语替换对应匹配的所有短语,并且可选择保留原始短语进行索引。TZ词典实际上是Synonym词典的一个扩展,增加了短语支持。分类词典的配置文件格式要求如下:# this is a commentsample word(s) : indexed word(s)more sample word(s) : more原创 2022-02-16 09:25:34 · 155 阅读 · 0 评论 -
GBase 8c 词典-同义词词典
星号(*)可用于词典文件中的同义词结尾,表示该同义词是一个前缀。在to_tsvector()中该星号将被忽略,但在to_tsquery()中会匹配该前缀并对应输出结果。假设词典文件synonym_sample.syn内容如下:postgres pgsqlpostgresql pgsqlpostgre pgsqlgogle googlindices index*创建并使用词典:gbase=# CREATE TEXT SEARCH DICTIONA...原创 2022-02-16 09:22:55 · 184 阅读 · 0 评论 -
GBase 8c 词典-同义词词典概念
同义词(Synonym)词典用于定义、识别文档的同义词并转化,不支持词组。Synonym词典可用于解决语言学相关问题,例如,为避免使单词"Paris"变成"pari",可在Synonym词典文件中定义一行"Paris paris",并将该词典放置在预定义的english_stem词典之前。SELECT * FROM ts_debug('english', 'Paris');alias | description | token | dicti...原创 2022-02-15 14:34:59 · 138 阅读 · 0 评论 -
GBase 8c 词典-简单词典
简单(simple)词典首先将输入标记转换为小写字母,然后检查停用词表。如果识别为停用词则返回空数组,即表示该标记会被丢弃。否则,输入标记的小写形式作为规范化后的lexeme返回。此外,简单词典可通过设置参数Accept为false(默认值true),将非停用词报告为未识别,传递给后继词典继续处理。例如:首先创建simple模板的词典:gbase=# CREATE TEXT SEARCH DICTIONARY public.simple_dict ( TEMPLAT...原创 2022-02-15 14:12:52 · 132 阅读 · 0 评论 -
GBase 8c 词典-停用词
停用词是很常见的词,几乎出现在每一个文档中,并且没有区分值。因此,在全文搜索的语境下可忽视它们。例如,每一段英文文本都包含a和the,因此将其存储在索引中是没有用的。然而,停用词影响tsvector中的位置,同时位置也会影响相关度:gbase=# SELECT to_tsvector('english','in the list of stop words');to_tsvector----------------------------'list':3 ...原创 2022-02-15 14:10:05 · 136 阅读 · 0 评论 -
GBase 8c 词典列表配置
配置GBase 8c词典列表的一般规则是,第一个位置放置一个应用范围最小的、最具体化定义的词典,其次是更一般化定义的词典, 最后是一个普适定义的词典,比如Snowball词干词典或Simple词典。在下面例子中,对于一个针对天文学的文本搜索配置astro_en,可以定义标记类型asciiword(ASCII词)对应的词典列表为:天文术语的Synonym同义词词典,Ispell英语词典和Snowball英语词干词典。ALTER TEXT SEARCH CONFIGURATION astr...原创 2022-02-15 13:58:04 · 79 阅读 · 0 评论 -
GBase 8c 词典
词典用于定义停用词(stop words),即全文检索时不搜索哪些词。词典还可以用于对同一词的不同形式进行规范化,这样同一个词的不同派生形式都可以进行匹配。规范化后的词称为词位(lexeme)。除了提高检索质量外,词的规范化和删除停用词可以减少文档tsvector格式的大小,从而提高性能。词的规范化和删除停用词并不总是具有语言学意义,用户可以根据应用环境在词典定义文件中自定义规范化和删除规则。一个词典是一个程序,接收标记作为输入,并返回:如果标记在词典中已知,返回对应lexeme数组(注原创 2022-02-15 13:55:45 · 265 阅读 · 0 评论 -
GBase 8c 全文检索-收集文档统计数据
ts_stat函数可用于检查配置和查找候选停用词。ts_stat(sqlquery text, [ weights text, ] OUT word text, OUT ndoc integer, OUT nentry integer) returns setof recordsqlquery是一个包含SQL查询语句的文本,该SQL查询将返回一个tsvector。ts_stat执行SQL查询语句并返回一个包含tsvector中每一个不同的语素(词)的统计信息。返原创 2022-02-15 11:12:41 · 161 阅读 · 0 评论 -
GBase 8c 全文检索-查询重写
ts_rewrite函数族可以从tsquery中搜索一个特定的目标子查询,并在该子查询每次出现的地方都替换为另一个子查询。 实际上这只是通过字串替换而得到的一个特定tsquery版本。目标子查询和替换查询组合起来可以被认为是一个重写规则。一组类似的重写规则可以为搜索提供强大的帮助。例如,可以使用同义词扩大搜索范围(例如,newyork, big apple, nyc, gotham)或限制搜索范围在用户直接感兴趣的热点话题上。ts_rewrite (query tsquery, tar...原创 2022-02-15 09:47:20 · 154 阅读 · 0 评论 -
GBase 8c 全文检索-处理查询(二)
GBase 8c提供了函数和操作符用来操作tsquery类型的查询。tsquery_phrase(query1 tsquery, query2 tsquery [, distance integer ]) returns tsquery返回两个给定查询tsquery的距离为distance个词位的匹配。例如:gbase=# SELECT tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10);t...原创 2022-02-15 09:40:39 · 243 阅读 · 0 评论 -
GBase 8c 全文检索-处理查询(一)
GBase 8c提供了函数和操作符用来操作tsquery类型的查询。tsquery && tsquery返回两个给定查询tsquery的与结果。tsquery || tsquery返回两个给定查询tsquery的或结果。!! tsquery返回给定查询tsquery的非结果。tsquery <-> tsquery返回给定查询tsquery的<->结果。例如:g...原创 2022-02-15 09:21:45 · 143 阅读 · 0 评论 -
GBase 8c 全文检索-处理文档(三)
GBase8c提供了用来操作tsvector类型的函数和操作符。length(vector tsvector) returns integer返回vector中的词素的数量。strip(vector tsvector) returns tsvector返回一个tsvector类型,其中包含输入的tsvector的同义词,但不包含任何位置和权重信息。虽然在相关性排序中,这里返回的tsvector要比未拆分的tsvector的作用小很多,但它通常...原创 2022-02-15 09:15:35 · 210 阅读 · 0 评论 -
GBase 8c 全文检索-处理文档(二)
GBase8c提供了用来操作tsvector类型的函数和操作符。setweight(vector tsvector, weight "char") returns tsvectorsetweight返回一个输入tsvector的副本,其中每一个位置都使用给定的权重做了标记。权值可以为A、B、C或D(D是tsvector副本的默认权重,并且不在输出中呈现)。当对tsvector进行连接操作时,这些权重标签将会被保留,文档不同部分以不同的权重进行排序。注意:权重标签...原创 2022-02-14 14:55:53 · 120 阅读 · 0 评论 -
GBase 8c 全文检索-处理文档
GBase 8c提供了用来操作tsvector类型的函数和操作符。tsvector || tsvectortsvector连接操作符返回一个新的tsvector类型,它综合了两个tsvector中词素和位置信息,并保留词素的位置信息和权重标签。右侧的tsvector的起始位置位于左侧tsvector的最后位置,因此,新生成的tsvector几乎等同于将两个原始文档字串连接后进行to_tsvector操作。(这个等价是不准确的,因为任何从左边tsvector中删除的停用...原创 2022-02-14 14:53:17 · 69 阅读 · 0 评论 -
GBase 8c 全文检索-表检索
在没有索引的情况下,使用GBase 8c全文检索功能检索表,需要@@操作符。例如,查询文档中每行title匹配friend:gbase=# SELECT id, body, title FROM pgweb WHERE to_tsvector('english', body) @@to_tsquery('english', 'america');也可以创建GIN索引来加速文本搜索,例如:gbase=# CREATE INDEX pgweb_idx ON pgw...原创 2022-02-14 14:51:24 · 453 阅读 · 0 评论 -
GBase 8c 全文检索-相关的数据库对象
GBase8c文本搜索功能提供了四种类型与分词器相关的数据库对象:文本搜索解析器将文档分解为词位,并且分类每个词位(例如:词和数字)。 文本搜索词典将词位转换成规范格式并且丢弃停用词。 文本搜索模板提供潜在的词典功能:一个词典指定一个模板,并且为模板设置参数。 文本搜索分词器选择一个解析器,并且使用一系列词典规范化语法分析器产生的词位。...原创 2022-02-14 14:02:15 · 234 阅读 · 0 评论 -
GBase 8c 全文检索-配置
全文检索功能还可以做更多事情:忽略索引某个词(停用词),处理同义词和使用复杂解析,例如:不仅基于空格的解析。这些功能通过文本搜索分词器控制。GBase8c支持多语言的预定义的分词器,并且可以创建分词器(gsql的\dF命令显示了所有可用分词器)。在安装期间选择一个合适的分词器,并且在postgresql.conf中相应的设置default_text_search_config。如果为了整个集群使用同一个文本搜索分词器可以使用postgresql.conf中的值。如果需要在集群中使用不同...原创 2022-02-14 13:58:58 · 95 阅读 · 0 评论 -
GBase 8c全文检索-文本匹配
GBase 8c的全文搜索基于匹配操作符@@,它在一个tsvector(文档)匹配一个tsquery(查询)时返回true。例如:gbase=# SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector @@ 'cat & rat'::tsquery;?column?----------t(1 row)gbase=# SELECT 'fat & cow'::tsquery @@ 'a...原创 2022-02-14 13:55:14 · 185 阅读 · 0 评论 -
GBase 8c 全文检索-文档概念
文档是全文搜索系统的搜索单元。文档通常是一个数据库表中一行的文本字段,或者这些字段的可能组合(级联)。文档可能存储在多个表中或者需动态获取。换句话说,一个文档由被索引化的不同部分构成,因此无法存储为一个整体。比如:gbase=# SELECT name || ' ' || age || ' ' || address || ' ' || salary AS document FROM company WHERE id = 2;document--------...原创 2022-02-14 13:53:08 · 240 阅读 · 0 评论 -
GBase 8c 全文检索-概述
文本搜索(~、~*、LIKE和ILIKE操作符)在对文本进行搜索操作时,缺少一些系统要求的必要属性:即使是英文环境也没有语义支持; 没有对搜索结果的分类(排序)。当搜索出成千的文档时,查找效率很低。 由于没有索引的支持,每一次的搜索需要遍历所有的文档,整体搜索比较缓慢。使用全文索引可以对文档进行预处理,并且可以使后续的搜索更快速。预处理过程包括:1. 将文档解析成记号:为每个文档标记不同类别的记号是非常有必要的,例如:数字、文...原创 2022-02-14 13:47:54 · 106 阅读 · 0 评论 -
GBase 8c 设置字符集
initdb定义数据库默认字符集/编码,例如:initdb -E GKR可以用--encoding代替-E。如果没有给出-E或者--encoding选项,initdb会尝试基于指定的或者默认的区域判断要使用的合适编码。使用非默认字符集/编码时,应考虑其与所选择的区域兼容:createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean或使用SQL命令实现:CREATE DATA原创 2022-02-14 13:41:38 · 415 阅读 · 0 评论