8

我想知道使用 GIN/GiST 索引的 PostgreSQL 9.3 中的全文搜索是否使用 tf-idf(词频-逆文档频率)。

特别是,在我的短语列中,我有一些更流行的词,而有些词则非常独特(即名称)。我想索引这些列,以便匹配的唯一单词的权重高于普通单词。

4

4 回答 4

4

没有。在 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-07-18T17:40:41.730 回答
3

No Postgres 不使用 TF-IDF 作为文档之间的相似性度量。

ts_rank如果文档更频繁地包含查询词,则更高。它没有考虑该术语的全球频率。

ts_rank_cd如果文档包含更靠近且更频繁的查询词,则该值会更高。它没有考虑该术语的全球频率。

文本搜索创建者有一个名为smlar的扩展,可让您使用 TF-IDF 计算数组之间的相似性。它还允许您将 tsvector 转换为数组,并支持快速索引。

于 2014-08-01T01:19:14.227 回答
1

如果您用于ts_vector存储 TF、GIN存储 IDF 和ts_query查询数据,它确实如此。

我发现这篇关于使用 postgres 高效搜索文本的文章有助于设置它。

于 2021-12-22T22:46:10.423 回答
-1

大多。详细信息在http://www.postgresql.org/docs/9.1/static/textsearch-controls.html中描述

基本问题是,术语频率实际上并不是基于您要索引的语料库,而是在字典中设置。所以在我看来,只要你正确选择一种语言,你应该没问题。

于 2013-11-10T15:34:54.533 回答