elasticsearch:如何按字段分组+考虑排名+保持原始顺序

wgeznvg7  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(317)

假设我有一堆t恤,每件t恤都有不同的款式。每个变量都有一个排名值:

[
  [
     'name' => 'T-Shirt, Variant AAA',
     'ranking' => 1.
     'shirt_id' => 1
  ],
  [
     'name' => 'T-Shirt, Variant ZZZ'
     'ranking' => 2,
     'shirt_id' => 1,
  ],
  [
     'name' => 'Another Shirt, Variant BBB',
     'ranking' => 1,
     'shirt_id' => 2,
  ]

]

如果用户现在执行搜索-按名称排序-我希望得到以下结果:

[      
  [
     'name' => 'Another Shirt, Variant BBB',
     'ranking' => 1,
     'shirt_id' => 2,
  ],
  [
     'name' => 'T-Shirt, Variant ZZZ'
     'ranking' => 2,
     'shirt_id' => 1,
  ],
]

所以第一次击中的是唯一的变种从衬衫2号。第二个命中的是从shirt\u id 1中排名最高的变体。
我试过好几种方法。通过折叠我发现有可能通过衬衫id折叠,并通过内部点击得到排名最高的变体。但顺序不正确,因为按名称排序不是对折叠的内部命中执行的,而是对实际命中执行的。
我还尝试了总点击率聚合。如果我理解正确,这将按定义的字段(shirt\u id)聚合结果,并返回具有相同字段值的每个文档的最高分数的文档。但是,如果我按名称进行自定义排序,就不会得到任何分数值,即使我另外添加了一个函数score query,它只会将ranking字段作为分数值。
你知道怎么解决这个问题吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题