【发布时间】:2018-03-24 06:21:14
【问题描述】:
我有一个包含 100m 行的表,我需要对其进行全文搜索
并提供有关相似程度的信息(例如使用pg_trgm 模块)
文本是。关闭原因是这里的问题是它应该很快。
我尝试了 gist 和 gin 索引,有一个额外的列,其中包含我的字段的 tsvector 等。
我的想法是先使用 tsvector 进行查询,然后运行 pg_trgm 模块提供的相似度函数。
我的问题如下。如果我使用整个单词作为查询,它将起作用。但如果我附加一些东西就不会。
这完全有道理,因为“A quick brown fox...”的 tsvector 是
"'a':1 'brown':3 'fox':4 'quick':2".
我希望我清楚我想要实现的目标。
示例:
作品
select to_tsvector('A quick brown fox...') @@ to_tsquery('quick') -- true
不工作
select to_tsvector('A quick brown fox...') @@ to_tsquery('quicks') -- false
关于如何使用 postgresql 实现这一点的任何想法?
【问题讨论】:
-
那是什么版本的 Postgres?第二个查询在 9.6.2 上给了我真实的信息编辑:哦,在 9.6.5 上检查过,确实如您所描述的那样工作。
-
@ŁukaszKamiński 这取决于字典。如果我在 to_tsquery 中明确使用“简单”字典,则默认情况下我使用“english”字典得到 true,否则返回 false。我认为这是由于词干提取,它会删除 s,但不会只删除末尾的任意字符。
-
@ŁukaszKamiński 我得到了 PostgreSQL 9.6.2
-
@MadScientist 确实如此。我尝试了
to_tsquery('english', 'quicks')并得到了真实的结果。
标签: postgresql