gpt4 book ai didi

postgresql - 如何让 postgresql 文本搜索在排名中使用搜索词顺序

转载 作者:行者123 更新时间:2023-11-29 14:02:22 24 4
gpt4 key购买 nike

以下PostgreSQL文本搜索

select 
ID, DISPLAY_NAME,
ts_rank_cd(to_tsvector('english', display_name), query) as RANK
from
my_table,
to_tsquery('english', 'John:*&Bernard:*') as query
where
to_tsvector('english', display_name) @@ query
order by RANK DESC

产生

ID    DISPLAY_NAME         RANK   
=====================================
82683 "BERNARD JOHN SMBZh" 0.05
63815 "BERNARD JOHN []zkP" 0.05
68204 "BERNARD JOHN uPmYB" 0.05
29666 "John Bernard iECx" 0.05
44256 "John Bernard DpIff" 0.05
52601 "BERNARD JOHN ivRTX" 0.05
80250 "BERNARD JOHN b'nVp" 0.0430677

但我真正想要的是“John Bernard*”记录具有更高的排名,因为“文档”中的术语与查询的出现顺序相同。这可能吗?

例如像这样的结果:

ID    DISPLAY_NAME         RANK   
=====================================
29666 "John Bernard iECx" 0.10
44256 "John Bernard DpIff" 0.10
82683 "BERNARD JOHN SMBZh" 0.05
63815 "BERNARD JOHN []zkP" 0.05
68204 "BERNARD JOHN uPmYB" 0.05
52601 "BERNARD JOHN ivRTX" 0.05
80250 "BERNARD JOHN b'nVp" 0.0430677

干杯克雷格

最佳答案

我认为您将不得不考虑一种解决方案,该解决方案涉及除 tsearch 之外的另一种排名机制,因为它 does not handle phrases .

怎么样:

create table my_table(id serial primary key, display_name text);
insert into my_table(display_name) values ('John Bernard iECx'),
('John Bernard DpIff'),
('BERNARD JOHN SMBZh'),
('BERNARD JOHN b''nVp');
select
ID, DISPLAY_NAME,
ts_rank_cd(to_tsvector('english', display_name), query)
*case when display_name~*'.*john bernard.*' then 2 else 1 end as RANK
from
my_table,
to_tsquery('english', 'John:*&Bernard:*') as query
where
to_tsvector('english', display_name) @@ query
order by RANK DESC;

制作:

 id |    display_name    |       rank
----+--------------------+-------------------
1 | John Bernard iECx | 0.200000002980232
2 | John Bernard DpIff | 0.200000002980232
3 | BERNARD JOHN SMBZh | 0.100000001490116
4 | BERNARD JOHN b'nVp | 0.100000001490116

关于postgresql - 如何让 postgresql 文本搜索在排名中使用搜索词顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com