首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr TF与所有术语匹配

Solr TF与所有术语匹配
EN

Stack Overflow用户
提问于 2014-02-28 20:40:53
回答 2查看 411关注 0票数 2

我观察到Solr/Lucene赋予了太多的权重来匹配特定查询词的tf上的所有查询词。例如:

假设我们的查询是: text:( "red“"jacket”“red jacket")

文档A ->包含40次"jacket“

文档B ->包含"red jacket“1次(并且因为这个"red”1次和"jacket“1次)

文档B的得分要高得多,因为它只包含查询的所有三个术语,但只有一次,而文档A的得分非常低,即使它包含一个术语很多次。

我能以这样的方式创建一个查询吗?如果Lucene找到"red jacket“的匹配项,它不会将其分别视为"red”和"jacket“的匹配项?

EN

回答 2

Stack Overflow用户

发布于 2014-02-28 22:52:01

我建议使用DisjunctionMaxQuery。在原始Lucene中,这看起来像这样:

代码语言:javascript
复制
Query dismax = new DisjunctionMaxQuery(0);
dismax.add(parser.parse("red"));
dismax.add(parser.parse("junction"));
dismax.add(parser.parse("red jacket"));

dismax查询将使用子查询中的最大分数进行评分,而不是使用子查询分数的乘积。

通过使用Solr,可以使用dismaxedismax查询解析器以及其他许多方便的特性。类似于:

代码语言:javascript
复制
select/?q=red+jacket+"red jacket"&defType=dismax
票数 1
EN

Stack Overflow用户

发布于 2016-01-05 22:35:48

Tf-idf是搜索引擎通常做的事情,但不是你一直想要的。如果你想忽略重复的关键词,这不是你想要的。

Tf-idf计算为to因子的乘积: tf x idf。tf (词频)是一个词在文本中出现的频率。idf (逆向文档频率)意味着一个单词在搜索引擎中的所有文档中的唯一性程度。

考虑一个包含100个单词的文本,其中单词cat出现了3次。则cat的项频率(即tf)为(3 / 100) = 0.03。现在,假设我们有1000万个文档,并且单词cat出现在其中的1000个文档中。然后,反向文档频率(即idf)被计算为log(10,000,000 / 1,000) = 4。因此,Tf-idf权重是这些量的乘积: 0.03 *4= 0.12。请参见示例的original source

忽略tf-idf的最好方法可能是Solr exists函数,该函数可通过bf相关性提升参数访问。例如:

Bf=if(exists(查询(位置:A)),5,if(exists(查询(位置:B)),3,0)

参见第二个示例的original source和上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22095542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档