当前位置: 首页 > 面试题库 >

如何在Postgresql中SQL查询带标点的单词?

宋铭
2023-03-14
问题内容

如果我有这样的字符串/短语存储在数据库中:

  • 什么是Q型操作?
  • 程序员指南
  • ABC的编码

有没有办法像传递的查询参数"Programmers""abc""q-type"并将其找到"Programmer's""A.B.C""Q-type"


问题答案:

tsvector

使用tsvector类型,它是PostgreSQL文本搜索功能的一部分。

postgres> select 'What are Q-type Operations?'::tsvector;
              tsvector               
-------------------------------------
 'Operations?' 'Q-type' 'What' 'are'
(1 row)

您也可以在tsvectors上使用熟悉的运算符:

postgres> select 'What are Q-type Operations?'::tsvector
postgres>        || 'A.B.C''s of Coding'::tsvector;
                           ?column?                           
--------------------------------------------------------------
 'A.B.C''s' 'Coding' 'Operations?' 'Q-type' 'What' 'are' 'of'

从tsvector文档中:

tsvector值是不同词素的排序列表,这些词素是已归一化以合并同一单词的不同变体的单词(有关详细信息,请参见第12章)。输入期间自动完成排序和重复消除

如果您还想进行特定于语言的标准化,例如删除常用单词(“ the”,“
a”等)并进行乘法,请使用该to_tsvector函数。它还将权重分配给不同的单词以进行文本搜索:

postgres> select to_tsvector('english',
postgres> 'What are Q-type Operations? A.B.C''s of Coding');
                      to_tsvector                       
--------------------------------------------------------
 'a.b.c':7 'code':10 'oper':6 'q':4 'q-type':3 'type':5
(1 row)

全面的文本搜索

显然,对查询中的每一行执行此操作都将非常昂贵-
因此,应将tsvector存储在单独的列中,并使用ts_query()进行搜索。这还允许您在tsvector上创建GiST索引。

postgres> insert into text (phrase, tsvec)
postgres>   values('What are Q-type Operations?',
postgres>   to_tsvector('english', 'What are Q-type Operations?'));
INSERT 0 1

搜索是使用tsquery和@@运算符完成的:

postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
           phrase            
-----------------------------
 What are Q-type Operations?
(1 row)


 类似资料:
  • 问题内容: 我有PostgreSQL数据库,我尝试打印所有用户(人)。 当我执行此查询时 我得到所有车主按汽车数量排序 输出: 当我尝试链接所有者ID时,所有订单都出错了。 输出:和其他数据 你看比命令是错误的。所以这是我的问题,我该如何保存该订单? 问题答案: 解开混乱。先汇总,然后再加入: 无需加入两次。如果您计数 最多或所有行, 这应该是最快的。 对于 较小的选择 , 相关子查询 更快: 至

  • 问题内容: 我有下面的简单表: 然后,我尝试插入具有多边形的行: 并遇到此错误: 列“ poly”是多边形类型,而表达式是“ geometry”类型 真是la子 所以我的第一个问题是: 我真的必须施展吗? 无论如何,在投射之后它就可以工作了。现在,我正在尝试执行一个简单的ST_Contains查询: 这给出了错误: 我应该做些什么? 以下作品: 但这可能是因为两个参数都属于Geometry类型。针

  • 我试图使用Django将PostgreSQL表提取到HTML中,当我在PostgreSQL的查询工具中执行空间查询时,我得到了完美的结果,但当我试图从Django执行相同的脚本时,我得到了所有的数据行。谢谢你提前帮忙。 姜戈剧本 HTML

  • 问题内容: 在Oracle中,可以使用关键字返回SQL查询内部的内容,如下所示: 问题是: 有谁知道我在哪里可以找到相关文档? PortgreSQL(或任何其他开源DBMS)是否具有类似的功能? 问题答案: 它被称为CURSOR EXPRESSION,并在明显的地方记录了该文档:《 Oracle SQL参考》。 在这里找到它。 关于第二个问题,PostgreSQL提供的与此功能最接近的东西是“标量

  • 查询工作正常,并返回列中有的所有记录。 但是,如果我想获取在中存在的所有记录,我就无法形成正确的查询。 查询不转义单引号,而是按字面意思转义,导致查询不完整。

  • 问题内容: 如何声明用于PostgreSQL 8.3查询的变量? 在MS SQL Server中,我可以这样做: 我如何在PostgreSQL中做同样的事情?根据文档,变量被简单地声明为“名称类型;”,但这给了我一个语法错误: 有人可以给我一个正确语法的例子吗? 问题答案: PostgreSQL中没有这样的功能。您只能在pl / PgSQL(或其他pl / *)中执行此操作,而不能在普通SQL中执