如果数据库中存储了这样的字符串/短语:
什么是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/