Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在solr中对术语频率给予较少的权重?_Solr_Django Haystack - Fatal编程技术网

在solr中对术语频率给予较少的权重?

在solr中对术语频率给予较少的权重?,solr,django-haystack,Solr,Django Haystack,如何更改Solr的评分函数,以减少术语频率的权重 我使用类似pagerank的文档增强作为相关性因素。我的搜索索引目前将许多垃圾文档或未清理好的文档放在顶部,并且有重复的单词 我知道分数是通过搜索词在文档中的频率、反向文档频率等计算的。我可以只是增加刺激,但这也会忽略其他因素 是在查询时指定函数的方法,默认函数是什么,还是必须更改配置和重新索引?我将django haystack与solr一起使用,如果这有什么不同的话。我不确定这是最好的方法,但这似乎有效。我在java中创建了一个相似的子类。在

如何更改Solr的评分函数,以减少术语频率的权重

我使用类似pagerank的文档增强作为相关性因素。我的搜索索引目前将许多垃圾文档或未清理好的文档放在顶部,并且有重复的单词

我知道分数是通过搜索词在文档中的频率、反向文档频率等计算的。我可以只是增加刺激,但这也会忽略其他因素


是在查询时指定函数的方法,默认函数是什么,还是必须更改配置和重新索引?我将django haystack与solr一起使用,如果这有什么不同的话。

我不确定这是最好的方法,但这似乎有效。我在java中创建了一个相似的子类。在经典相似性中,术语频率定义为sqrtfreq。增加一个乘法因子是没有意义的,因为tf是与其他项相乘的,而不是相加的——比例因子将被统一应用。也就是说,比例*a*b没有意义,比例*a+b会有意义。但在这种情况下,你能做的是a^scale*b。这基本上是在对数中应用比例因子:logscore=scale*loga+logb

还要注意,默认的相似性函数似乎不是TF-IDF,而是BM25。这是TF-IDF的一个变体

包com.example.solr; 导入org.apache.lucene.search.complications.ClassicSimilarity; 公共类CustomSimilarity扩展了ClassicSimilarity{ @凌驾 公共浮动tffloat freq{ 返回float Math.powfreq,0.25;//默认值:0.5 } @凌驾 公共字符串toString{ 回归相似性; } } 用以下代码编译:

javac -cp /path/to/solr-6.6.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-6.6.1.jar:. -d . CustomSimilarity.java
jar -cvf myscorer.jar com
然后,添加到solrconfig.xml:

在schema.xml中:


重新启动solr后,您可以验证新的相似性类是否正在下使用http://localhost:8983/solr///schema.

随着Solr6的发布,默认相似性切换为BM25。您现在还可以为每个字段设置相似性类,这样您就可以有一个字段的计算结果与其他字段不同。谢谢您提供的信息!下面是一个关于Lucene中TD-IDF和BM25之间差异的指导性链接: