簡體   English   中英

Elasticsearch - 根據折疊結果對查詢進行排序

[英]Elasticsearch - Sort query based on collapse results

我正在嘗試根據 SKU 對項目進行分組/堆疊。

目前,如果從高到低排序,以 10 美元或 1 美元出售的商品將首先顯示 1 美元的商品(因為它也是以 10 美元出售的,所以它當然會放在數組的前面)。 排序應該只考慮其排序操作的lowest_price ,僅針對該特定 SKU。

有沒有辦法讓我可以根據每個 SKU 的最低價格進行排序,並且每個 SKU 只返回 1 件單品?

如果崩潰的結果可以用作排序的變量,這可以解決,但我無法找出它是如何工作的。

我的項目 object 看起來像這樣:

{
    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'
                }]
            }
        ],
    }
};

您需要在折疊下方添加排序。 例子:

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"
      }
    }
  ]
}

這可能會解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM