您的位置:58脚本 > PostgreSQL 文本搜索类型

PostgreSQL 文本搜索类型

2023-05-12 12:32

 PostgreSQL 文本搜索类型

8.11.1. tsvector
8.11.2. tsquery

PostgreSQL提供两种数据类型,它们被设计用来支持全文搜索,全文搜索是一种在自然语言的文档集合中搜索以定位那些最匹配一个查询的文档的活动。tsvector类型表示一个为文本搜索优化的形式下的文档,tsquery类型表示一个文本查询。第 12 章提供了对于这种功能的详细解释,并且第 9.13 节总结了相关的函数和操作符。

8.11.1. tsvector

一个tsvector值是一个排序的可区分词位的列表,词位是被正规化合并了同一个词的不同变种的词(详见第 12 章)。排序和去重是在输入期间自动完成的,如下例所示:

SELECT "a fat cat sat on a mat and ate a fat rat"::tsvector;
                      tsvector
----------------------------------------------------
 "a" "and" "ate" "cat" "fat" "mat" "on" "rat" "sat"

要表示包含空白或标点的词位,将它们用引号包围:

SELECT $$the lexeme "    " contains spaces$$::tsvector;
                 tsvector
-------------------------------------------
 "    " "contains" "lexeme" "spaces" "the"

(我们在这个例子中使用美元符号包围的串文字并且下一个用来避免在文字中包含双引号记号产生的混淆)。嵌入的引号和反斜线必须被双写:

SELECT $$the lexeme "Joe""s" contains a quote$$::tsvector;
                    tsvector
------------------------------------------------
 "Joe""s" "a" "contains" "lexeme" "quote" "the"

可选的,整数位置可以被附加给词位:

SELECT "a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12"::tsvector;
                                  tsvector
-------------------------------------------------------------------​------------
 "a":1,6,10 "and":8 "ate":9 "cat":3 "fat":2,11 "mat":7 "on":5 "rat":12 "sat":4

一个位置通常表示源词在文档中的定位。位置信息可以被用于邻近排名。位置值可以从 1 到 16383,更大的数字会被 16383。对于相同的词位出现的重复位置将被丢弃。

具有位置的词位可以进一步地被标注一个权重,它可以是ABCDD是默认值并且因此在输出中不会显示:

SELECT "a:1A fat:2B,4C cat:5D"::tsvector;
          tsvector
----------------------------
 "a":1A "cat":5 "fat":2B,4C

权重通常被用来反映文档结构,例如将主题词标记成与正文词不同。文本搜索排名函数可以为不同的权重标记器分配不同的优先级。

了解tsvector类型本身并不执行任何词正规化这一点很重要,它假定给它的词已经被恰当地为应用正规化过。例如,

SELECT "The Fat Rats"::tsvector;
      tsvector
--------------------
 "Fat" "Rats" "The"

对于大部分英语文本搜索应用,上面的词将会被认为是非正规化的,但是tsvector并不在乎这一点。原始文档文本通常应该经过to_tsvector以恰当地为搜索正规化其中的词:

SELECT to_tsvector("english", "The Fat Rats");
   to_tsvector
-----------------
 "fat":2 "rat":3

再次地,详情请参阅第 12 章。

8.11.2. tsquery

一个tsquery值存储要用于搜索的词位,并且使用布尔操作符&(AND)、|(OR)和!(NOT)来组合它们,还有短语搜索操作符<->(FOLLOWED BY)。也有一种 FOLLOWED BY 操作符的变体<N>,其中N是一个整数常量,它指定要搜索的两个词位之间的距离。<->等效于<1>

圆括号可以被用来强制对操作符分组。如果没有圆括号,!(NOT)的优先级最高,其次是<->(FOLLOWED BY),然后是&(AND),最后是|(OR)。

这里有一些例子:

SELECT "fat & rat"::tsquery;
    tsquery    
---------------
 "fat" & "rat"

SELECT "fat & (rat | cat)"::tsquery;
          tsquery          
---------------------------
 "fat" & ( "rat" | "cat" )

SELECT "fat & rat & ! cat"::tsquery;
        tsquery         
------------------------
 "fat" & "rat" & !"cat"

可选地,一个tsquery中的词位可以被标注一个或多个权重字母,这将限制它们只能和具有那些权重之一的tsvector词位相匹配:

SELECT "fat:ab & cat"::tsquery;
    tsquery
------------------
 "fat":AB & "cat"

此外,一个tsquery中的词位可以被标注为*来指定前缀匹配:

SELECT "super:*"::tsquery;
  tsquery
-----------
 "super":*

这个查询将匹配一个tsvector中以super开头的任意词。

词位的引号规则和之前描述的tsvector中的词位相同;并且,正如tsvector,任何请求的词正规化必须在转换到tsquery类型之前完成。to_tsquery函数可以方便地执行这种正规化:

SELECT to_tsquery("Fat:ab & Cats");
    to_tsquery
------------------
 "fat":AB & "cat"

注意to_tsquery将会以和其他词同样的方式处理前缀,这也意味着下面的比较会返回真:

SELECT to_tsvector( "postgraduate" ) @@ to_tsquery( "postgres:*" );
 ?column?
----------
 t

因为postgres会被处理成postgr

SELECT to_tsvector( "postgraduate" ), to_tsquery( "postgres:*" );
  to_tsvector  | to_tsquery
---------------+------------
 "postgradu":1 | "postgr":*

这会匹配postgraduate被处理后的形式。


阅读全文
以上是58脚本为你收集整理的 PostgreSQL 文本搜索类型全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  PostgreSQL DROP TEXT SEARCH PARSER

    PostgreSQL DROP TEXT SEARCH PARSER

    DROP TEXT SEARCH PARSER — 移除一个文本搜索解析器大纲DROP TEXT SEARCH PARSER [ IF EXISTS ] name [ CASCADE | RESTRICT ]描...

  •  PostgreSQL LOAD
  •  PostgreSQL SHOW

    PostgreSQL SHOW

    SHOW — 显示一个运行时参数的值大纲SHOW nameSHOW ALL描述 SHOW将显示运行时参数的当前设置。 这些变量可以使用SET语句、编辑 p...

  •  PostgreSQL clusterdb

    PostgreSQL clusterdb

    clusterdb — 聚簇一个PostgreSQL数据库大纲clusterdb [connection-option...] [ --verbose | -v ] [ --table | -ttable]... [db...

  •  PostgreSQL 内部概述

    PostgreSQL 内部概述

    目录50.1. 一个查询的路径50.2. 连接如何建立50.3. 分析器阶段50.3.1. 分析器50.3.2. 转换处理50.4. PostgreSQL规则系统50.5. 规...

  •  PostgreSQL pg_cast

    PostgreSQL pg_cast

    目录pg_cast存储数据类型转换路径,包括内建的和用户定义的类型。需要注意的是,pg_cast并不表示系统知道如何执行的所有类型转换...

  • vim normal Vimscript Normal命令

    vim normal Vimscript Normal命令

    目前为止我们已经介绍了几个最为常用的Vimscript命令,但都跟日常中在normal模式下处理文本的方式无关。 有没有一种办法能把我们...

  • 放射状渐变 SVG 渐变- 放射性

    放射状渐变 SVG 渐变- 放射性

    SVG 渐变- 放射性 SVG 放射性渐变是从一个点开始发散绘制渐变,创建径向渐变需要在文档的 defs 中添加一个 radialGradient 元素...

  •  XSL-FO region-after 对象

    XSL-FO region-after 对象

    XSL-FO region-after 对象XSL-FO 参考手册定义和用法 fo:region-after 对象定义了页面的底部区域(页脚)。 XSL-FO 使用下列元素...

  •  XSL-FO root 对象

    XSL-FO root 对象

    XSL-FO root 对象XSL-FO 参考手册定义和用法 fo:root 对象是 XSL-FO 文档的根(顶级)节点。 fo:root 对象的子类是一个单独的 fo...

© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS