是否可以删除给定字段上的重复项?

例如以下查询:

{
  "query": {
    "term": {
      "name_admin": {
        "value": "nike"
      }
    }
  },
  "_source": [
    "name_admin",
    "parent_sku",
    "sku"
  ],
  "size": 2
}

正在检索
"hits" : [
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "central30603",
        "_score" : 4.596813,
        "_source" : {
          "parent_sku" : "SSP57",
          "sku" : "SSP57816401",
          "name_admin" : "NIKE U NSW PRO CAP NIKE AIR"
        }
      },
      {
        "_index" : "product",
        "_type" : "_doc",
        "_id" : "central156578",
        "_score" : 4.596813,
        "_source" : {
          "parent_sku" : "SSP57",
          "sku" : "SSP57816395",
          "name_admin" : "NIKE U NSW PRO CAP NIKE AIR"
        }
      }
    ]

我想跳过parent_sku上的重复项,因此每个parent_sku只得到一个结果,就像suggestion可以通过执行"skip_duplicates": true这样来实现。

我知道我可以使用aggregation来实现此目的,但是我想坚持搜索,因为我的查询有点复杂,而且我使用的scroll API不适用于聚合。

最佳答案

Field collapsing应该在这里有所帮助

{
  "query": {
    "term": {
      "name_admin": {
        "value": "nike"
      }
    }
  },
  "collapse" : {
      "field" : "parent_sku",
      "inner_hits": {
          "name": "parent",
          "size": 1
      }
  },
  "_source": false,
  "size": 2
}

上面的查询将返回一个文档文件parent_sku

关于elasticsearch - 跳过Elasticsearch搜索结果中的字段重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62152287/

10-15 13:32