Elasticsearch基于事件的衰减分数

时间:2014-12-08 23:53:30

标签: sorting elasticsearch lucene ranking scoring

我试图找到一种方法来防止多个帖子出现在来自同一作者的搜索结果中。到目前为止,我已经尝试过随机评分,这让我可以保持分页。但是,在10个结果的给定页面中,我仍然可以拥有多达4个相同的作者。

有没有办法根据结果集中某个字段出现的次数对文档进行评分?据我所知,你不能在评分脚本中保留变量或对象。

我已经研究了几种实现这一目标的方法,但其中很多都有不少缺点。例如删除重复项,然后再次调用以检索已排除当前作者的新结果集。然而,这也可以返回多个相同的作者。因此,我要逐个查询以替换结果集中的重复作者,这会打破深层分页,因为最终用于替换重复项的其他结果集会在标准搜索之前耗尽页面。我也尝试过无法翻页的聚合。

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

3 个答案:

答案 0 :(得分:0)

您无法使用grouping的任何理由?只需按用户分组并定义组的顺序。

答案 1 :(得分:0)

您无法使弹性搜索排序多样化。您只能random_seed对文档进行评分并希望获得最佳成绩。您可以使用顶级命中聚合器之类的东西来聚合每个作者的存储桶,但是您不能对一组存储桶进行分页。因此打破了分页。

See here for more information

答案 2 :(得分:-1)

编辑:在你回答这个答案之前,因为它与Lucene有关而不是问题的真正答案:1。ElasticSearch是基于Lucene的2. OP想要做的事情真的很难做而且我只是在尝试帮助...

你可以尝试从这里开始腐烂:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-function-score-query.html

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

我在使用Lucene / Hibernate-Search的webapp中遇到了类似的问题,但我并没有真正得到令人满意的结果,但它仍然困扰着我。

我认为最好通过尝试以其他方式实现排序来获得良好的用户体验。