我有一个包含超过 5000 万条记录的数据库表,我需要尽快对其进行全文搜索。
在较小的表上,我只在文本列上有一个索引,然后使用相似性函数来获得相似的结果。我还可以根据相似度()的结果进行排序。
现在,在我的桌子变得更大之后,我切换到 tsvector。我为 tsvector 结果创建了一列,并创建了一个触发器,该触发器在插入或更新之前更新该列。之后我可以超快地搜索(<100ms)。
问题是我想结合使用 tsvector 和相似度。
我的表包含以下数据。
| MyColumn |
------------
| Apple |
| Orange |
| ... |
Run Code Online (Sandbox Code Playgroud)
但如果我搜索“App”,我不会得到“Apple”。
关于如何使用“分数/相似性”分数进行快速“喜欢/相似”搜索有什么想法吗?
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)
Run Code Online (Sandbox Code Playgroud)