ElasticSearch基于字段值的稀有性排序

kqhtkvqz  于 2023-02-11  发布在  ElasticSearch
关注(0)|答案(1)|浏览(121)

我想知道如何对较低的项目进行排名,这些项目的字段经常出现在结果中。比如,我们有一个类似的结果集:

"name": "Red T-Shirt"
  "store": "Zara"

  "name": "Yellow T-Shirt"
  "store": "Zara"

  "name": "Red T-Shirt"
  "store": "Bershka"

  "name": "Green T-Shirt"
  "store": "Benetton"

我希望以这样的方式对文档进行排序,即包含频繁找到的字段(在本例中为"store")的文档会被降低到结果中较低的位置,这是为了实现一点多样性,这样搜索就不会从同一个商店产生最高的结果。
在上面的例子中,如果我搜索"T恤",我希望看到一个Zara T恤在顶部,其余的Zara T恤应该出现在较低的位置,在所有其他独特的商店。
到目前为止,我试图研究使用聚合桶排序或脚本排序,但没有成功。有没有可能实现这一点内部的搜索引擎?
提前感谢!

6mzjoqzu

6mzjoqzu1#

Elastic forum中了解到,这可以通过diversified sampler aggregationtop hits aggregation的组合来实现。我不知道如果在高负载生产系统上使用,会对性能产生什么影响。下面是一个代码示例,使用风险自担:

{
  "query": {}, // whatever query
  "size": 0, // since we don't use hits
  "aggs": {
    "my_unbiased_sample": {
      "diversified_sampler": {
        "shard_size": 100,
        "field": "store"
      },
      "aggs": {
        "keywords": {
          "top_hits": {
            "_source": {
              "includes": [ "name", "store" ]
            },
            "size": 100
          }
        }
      }
    }
  }
}

相关问题