pg_search 搜索词完全匹配
pg_search exact match of search terms
当尝试在文档中查找 "Harrison Ford" 时,pg_search 将 return 任何包含 'Harrison' 和 'Ford' 的文本,例如:
pg_search_scope :search_by_full_name, :against => [:first_name, :last_name]
People.search_by_full_name("Harrison Ford")
可以 return:
George Harrison drives a Ford Focus
我怎样才能确保只有 'Harrison Ford'
的完全匹配才会 return?
您需要在 Postgres 中使用 pg_search
normalization, or basically ranking search results。我什至没有在以下示例中使用归一化因子:
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)
如果您同时拥有 Harrison
和 Ford
- 排名会更高:
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
并且会在顶部您的搜索结果列表。
当尝试在文档中查找 "Harrison Ford" 时,pg_search 将 return 任何包含 'Harrison' 和 'Ford' 的文本,例如:
pg_search_scope :search_by_full_name, :against => [:first_name, :last_name]
People.search_by_full_name("Harrison Ford")
可以 return:
George Harrison drives a Ford Focus
我怎样才能确保只有 'Harrison Ford'
的完全匹配才会 return?
您需要在 Postgres 中使用 pg_search
normalization, or basically ranking search results。我什至没有在以下示例中使用归一化因子:
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)
如果您同时拥有 Harrison
和 Ford
- 排名会更高:
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
并且会在顶部您的搜索结果列表。