Elasticsearch-根据折叠结果对查询进行排序

时间:2019-09-30 20:10:02

标签: elasticsearch

我正在尝试根据商品的SKU对商品进行分组/堆叠。

当前,如果从高到低排序,则以10美元或1美元的价格出售的商品会首先显示1美元的商品(因为它也以10美元的价格出售,因此会放在课程的前面)。排序仅应针对特定的SKU对lowest_price进行排序。

有没有办法让我可以根据每个SKU的最低价格进行排序,并且每个SKU仅返回1个单品?

如果崩溃的结果可以用作排序的变量,则可以解决此问题,但我无法找出其工作原理。

我的项目对象如下:

{
    itemId: String,
    sku: String,
    price: Number
}

这是我的查询

let itemsPerPage = 25;

let searchQuery = {
    from: itemsPerPage * page,
    size: itemsPerPage,
    _source: ['itemId'],
    sort: [{'sale.price': 'desc'}],
    query: {
        bool: {
            must: [],
            must_not: []
        }
    },
    collapse: {
        field: 'sku',
        inner_hits: [{
                name: 'lowest_price',
                size: 1,
                _source: ['itemId'],
                sort: [{
                    'price': 'asc'
                }]
            }
        ],
    }
};

1 个答案:

答案 0 :(得分:0)

您需要在折叠下方添加排序。 例如:

GET /test/_search
{
  "query": {
    "function_score": {
      "query": {
        "constant_score": {
          "filter": {
            "bool": {
              "must": [
                {
              "match" : {
              "job_status" : "SUCCESS"
              }
              }
              ]
            }
          }
        }
      }
    }
  },
   "collapse": {
    "field": "run_id.keyword"
  },
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ]
}

这可以解决您的问题。