我想知道在带有GIN/GiST索引的PostgreSQL 9.3中的全文搜索是否使用tf-idf (词频-逆文档频率)。
特别是,在我的词组专栏中,我有一些更受欢迎的词,而有些词则非常独特(即名称)。我想对这些列建立索引,以便匹配的唯一单词的权重将高于普通单词。
发布于 2014-07-19 01:40:42
不是的。在ts_rank函数中,没有本机方法可以使用结果的全局(语料库)频率对结果进行排名。然而,排名算法确实基于文档中的频率进行排名:
http://www.postgresql.org/docs/9.3/static/textsearch-controls.html
因此,如果我搜索"dog|chihuahua“,以下两个文档将具有相同的排名,尽管”chihuahua“一词的出现频率相对较低:
"I want a dog"
"I want a chihuahua"但是,以下行的排名将高于上面的两行,因为它在文档中包含了两次词干标记"dog“:
"dog lovers have an average of 1.5 dogs"简而言之:文档中较高的词频会导致较高的排名,但语料库中较低的词频没有影响。
一个警告:文本搜索不会忽略停用词,因此您不会匹配超高频单词,如" the“、"a”、"of“、"for”等(假设您已正确设置语言)。
发布于 2014-08-01 09:19:14
No Postgres不使用TF-IDF作为文档之间的相似性度量。
如果文档中包含查询词的频率更高,则ts_rank更高。它没有考虑到该术语的全局频率。
如果文档包含的查询词更接近且频率更高,则ts_rank_cd更高。它没有考虑到该术语的全局频率。
文本搜索创建器有一个名为smlar的扩展,它允许您使用TF-IDF计算数组之间的相似度。它还允许您将tsvector转换为数组,并支持快速索引。
发布于 2021-12-22 22:46:10
如果您使用ts_vector来存储TF,使用GIN来存储IDF,使用ts_query来查询数据,就会发生这种情况。
我发现Efficiently searching text using postgres上的这篇文章对设置它很有帮助。
https://stackoverflow.com/questions/18296444
复制相似问题