gpt4 book ai didi

ruby-on-rails - pg_search 搜索词的精确匹配

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:01 24 4
gpt4 key购买 nike

当尝试在文档中查找“Harrison Ford”时,pg_search 将返回任何包含“Harrison”和“Ford”的文本,例如:

  pg_search_scope :search_by_full_name, :against => [:first_name, :last_name]

People.search_by_full_name("Harrison Ford")

可以返回:

George Harrison drives a Ford Focus

我如何确保只返回与 'Harrison Ford' 完全匹配的结果?

最佳答案

您需要使用 pg_search normalization ,或者基本上是 ranking search results 在 Postgres 中。在以下示例中我什至没有使用归一化因子:

SELECT ts_rank_cd(vector,query) as rank 
FROM
to_tsvector('simple','George Harrison drives a Ford Focus') as vector,
to_tsquery('simple','Harrison & Ford') as query;

输出 1:

   rank    
-----------
0.0333333
(1 row)

如果你同时拥有 HarrisonFord - 排名会更高:

SELECT ts_rank_cd(vector,query) as rank
FROM
to_tsvector('simple','Harrison Ford drives a car') as vector,
to_tsquery('simple','Harrison & Ford') as query;

输出 2:

 rank 
------
0.1
(1 row)

如果你ORDER BY rank DESC你所有的搜索结果,你会得到你需要的,因为所有彼此相邻的搜索词将是最高的rank并将位于搜索结果列表的顶部。

关于ruby-on-rails - pg_search 搜索词的精确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34652256/

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