【发布时间】:2016-09-26 19:58:24
【问题描述】:
如何确保我的全文搜索结果按完全匹配和 THEN 前缀匹配排序?
SELECT ticker, name, ts_rank(document, to_tsquery('english', 'MAT:*')) AS rank
FROM (
SELECT *, setweight(to_tsvector('english', ticker), 'A') || setweight(to_tsvector('english', name), 'B') AS document
FROM ( VALUES
('MATI-R' , 'MATICHON PCL.NVDR')
,('MATCH-R', 'MATCHING MAXIMIZE SLN. NVDR')
,('MATV' , 'MATAV-CABLE SYS.MEDIA SPN.ADR 1:2 DEAD - DELIST.03/07/06')
,('MAT' , 'MATISSE HOLDINGS DEAD - 03/10/06')
,('MAT' , 'MATTEL')
) data (ticker,name)
) ss ORDER BY rank DESC
我在https://www.postgresql.org/docs/9.5/static/datatype-textsearch.html 上尝试了一些建议,例如to_tsquery('english', 'MAT:A & MAT:*B'),但似乎没有一个能满足我的需求。当前输出为
ticker | name | rank
---------+----------------------------------------------------------+----------
MATI-R | MATICHON PCL.NVDR | 1.45903
MATCH-R | MATCHING MAXIMIZE SLN. NVDR | 1.27665
MATV | MATAV-CABLE SYS.MEDIA SPN.ADR 1:2 DEAD - DELIST.03/07/06 | 1.09427
MAT | MATISSE HOLDINGS DEAD - 03/10/06 | 0.851098
MAT | MATTEL | 0.851098
当我想要更多类似的东西时
ticker | name | rank
---------+----------------------------------------------------------+----------
MAT | MATTEL | ??
MAT | MATISSE HOLDINGS DEAD - 03/10/06 | ??
MATCH-R | MATCHING MAXIMIZE SLN. NVDR | ??
MATI-R | MATICHON PCL.NVDR | ??
MATV | MATAV-CABLE SYS.MEDIA SPN.ADR 1:2 DEAD - DELIST.03/07/06 | ??
【问题讨论】:
标签: postgresql full-text-search