Postgresql:将相似性与tsvector结合使用

5

我有一个包含超过5000万条记录的数据库表需要尽可能快地进行全文搜索。

在较小的表中,我只需在文本列上建立索引,并使用相似性函数来获取相似结果。我还能够按相似性()的结果进行排序。

现在,在我的表变得更大之后,我切换到了tsvector。我创建了一个用于tsvector结果的列和一个触发器,在插入或更新之前更新该列。之后,我可以进行超快速搜索(<100ms)。

问题是我想同时使用tsvector和相似性的组合。

例子

我的表包含以下数据。

| MyColumn |
------------
| Apple    |
| Orange   |
| ...      |

但是如果我搜索“App”,我没有得到“苹果(Apple)”的结果。有什么好主意可以快速实现“类似”的搜索,并返回“得分/相似度”值吗?
1个回答

0

https://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES

此外,*可以附加在词素上,以指定前缀匹配:像这样?
postgres=# with c(v) as (values('Apple'),('App'),('application'),('apricote'))
select v,to_tsvector(v),to_tsvector(v) @@ to_tsquery('app:*') from c;
      v      | to_tsvector | ?column?
-------------+-------------+----------
 Apple       | 'appl':1    | t
 App         | 'app':1     | t
 application | 'applic':1  | t
 apricote    | 'apricot':1 | f
(4 rows)

postgres=# with c(v) as (values('Apple'),('App'),('application'),('apricote'))
select v,to_tsvector(v),to_tsvector(v) @@ to_tsquery('ap:*') from c;
      v      | to_tsvector | ?column?
-------------+-------------+----------
 Apple       | 'appl':1    | t
 App         | 'app':1     | t
 application | 'applic':1  | t
 apricote    | 'apricot':1 | t
(4 rows)

1
我不认为这个回答解决了 @dknaack 的问题。Prefix 把它引向正确的方向,但是拼写错误在 similarity 中也被考虑到了。他正在寻找两种方法的组合,而不仅仅是解决他单个示例的方案。 - Brendan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接