将重新计分和排序合并到一个Elasticsearch查询中

时间:2019-02-19 11:08:21

标签: elasticsearch elasticsearch-query

问题

如果我既需要重新评分又需要某种排序,那么什么是一个很好的替代查询?我知道不支持将两者结合使用(我正在使用的Elasticsearch 5.4版本未执行rescore查询,并且文档指出它在Elasticsearch 6.x中引发了异常),但是我无法提出单个查询会达到我期望的行为。

示例

比方说,我索引中的文档代表具有titledescriptiongenre字段的书籍。我希望有一个主要查询要在title字段上进行匹配,然后是一个重新评分查询才能在description字段上进行匹配以仅对前500个文档进行匹配,最后要进行一个涉及{{ 1}}字段(根据不同流派值的自定义顺序对结果进行排序)和重新评分。

我首先尝试使用以下查询:

genre

不令人满意的解决方法

由于重新评分和排序不兼容,因此我最终使用了三个不同的仅重新评分的查询,每种类型一个(幻想,惊悚和侦探),并按预期顺序连接结果。但是此解决方案有几个缺点:

  • 当我向Elasticsearch发送几个查询时,这比较耗时
  • 利用Elasticsearch功能分页结果更加困难
  • 它需要Elasticsearch之外的代码

在我的实际用例中,我不想将重新评分查询的内容带到主要查询中并仅使用排序,因为我的主要查询返回了许多文档,并且重新评分查询花费了太多时间来计算分数每个返回的文档...

预先感谢您提供有关如何同时处理记录和排序的建议!

0 个答案:

没有答案