Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Sorting 基于发生率的Elasticsearch衰减分数_Sorting_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Lucene_Ranking_Scoring - Fatal编程技术网 elasticsearch,lucene,ranking,scoring,Sorting,elasticsearch,Lucene,Ranking,Scoring" /> elasticsearch,lucene,ranking,scoring,Sorting,elasticsearch,Lucene,Ranking,Scoring" />

Sorting 基于发生率的Elasticsearch衰减分数

Sorting 基于发生率的Elasticsearch衰减分数,sorting,elasticsearch,lucene,ranking,scoring,Sorting,elasticsearch,Lucene,Ranking,Scoring,我正试图找到一种方法来防止来自同一作者的多篇文章出现在搜索结果中。到目前为止,我已经尝试了随机评分,这允许我保持分页。然而,在一个10个结果的给定页面中,我仍然可以有多达4个相同的作者 有没有办法根据某个字段在结果集中出现的次数为文档打分?就我所知,您不能在评分脚本中持久化变量或对象 我已经研究了几种实现这一点的方法,但其中许多都有不少缺点。例如,删除重复项,并再次调用以检索一组新的结果,其中排除了当前作者。但是,这也可以返回多个相同的作者。因此,我需要逐个查询以替换结果集中的重复作者,这会中断

我正试图找到一种方法来防止来自同一作者的多篇文章出现在搜索结果中。到目前为止,我已经尝试了随机评分,这允许我保持分页。然而,在一个10个结果的给定页面中,我仍然可以有多达4个相同的作者

有没有办法根据某个字段在结果集中出现的次数为文档打分?就我所知,您不能在评分脚本中持久化变量或对象

我已经研究了几种实现这一点的方法,但其中许多都有不少缺点。例如,删除重复项,并再次调用以检索一组新的结果,其中排除了当前作者。但是,这也可以返回多个相同的作者。因此,我需要逐个查询以替换结果集中的重复作者,这会中断深度分页,因为最终用于替换重复作者的另一个结果集在标准搜索之前用完了页面。我还尝试了无法分页的聚合


是否有任何功能可以根据同一作者(或字段)的文档出现的次数来分散或减去文档的分数?

编辑:在您因为与Lucene相关而不是问题的真实答案而否决此答案之前:1。ElasticSearch基于Lucene 2。OP想要做的事情真的很难做到,我只是想帮你

你可以试着在这里玩衰变游戏:

但是,这不允许对当前查询的先前点击进行反向引用(因为一种技术需要与您的用例相匹配)

在我们使用Lucene/Hibernate搜索的一个Web应用程序中,我遇到了一个与您类似的问题,但我并没有得到令人满意的结果,这仍然困扰着我


我认为最好通过尝试以另一种方式实现订购来获得良好的用户体验。

有什么原因不能使用吗?只需按用户分组并定义组的顺序。

您无法使elasticsearch排序多样化。您只能对文档进行
random\u seed
评分,并希望得到最好的结果。您可以使用类似top hits聚合器的方法来聚合每个作者的存储桶,但不能对一组存储桶进行分页。因此破坏分页


不过,如果你能找到一种方法并将其发布在这里,我会非常高兴:)顺便说一句。在我的Web应用程序中,我最终在Java代码中对内容进行了预排序,然后手动将排序器设置为查询。由于您使用的是ElasticSearch,而不是Lucene/HSearch,很遗憾,这不会起作用。这是我当年的问题:如果您指的是存储桶,则无法对存储桶进行分页。想想这个。我可以为每个作者创建一个bucket,然后我可以为每个作者创建一个bucket。假设有90位作者(该值会发生变化),该查询每次将在90个不同的存储桶中为我提供90个结果。桶本身不能分页。因此,无论每页有多少作者的文章,我都会得到。每个bucket本身都是可分页的,但是一组bucket则不是。所以我可以从和设置一个bucket的
大小
,但我不能在一组bucket上这样做。