如果数据库中存储了这样的字符串/短语:
什么是Q型操作?
程序员指南
A.B.C编码
是否有方法将查询参数传递给like"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'

From tsvector documentation:
tsvector值是不同词汇的排序列表,这些词汇是经过规范化以合并同一单词的不同变体的单词(有关详细信息,请参阅第12章)。输入过程中自动完成排序和重复消除
如果您还想执行特定于语言的规范化,如删除常用词('the','a',etc)和乘法,请使用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)

关于sql - 如何在Postgresql中SQL查询带标点的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5354342/

10-13 07:12