根据内部排序的top_hits结果编写一个对术语聚合桶进行排序的查询

时间:2018-01-10 18:14:55

标签: elasticsearch

我无法在elasticsearch中编写特定查询。

背景信息:

我有一个索引,其中每个文档代表一个“SKU”:产品的偏角(由pId表示)。

例如,前3个文件的颜色和产品235的价格下降。 BS是“最佳SKU”:对于给定的产品,SKU从最具代表性到最不具代表性的分类。

搜索后,只有与搜索匹配的最佳SKU才能用于进一步排序或聚合。

这是一个创建测试索引的脚本:

POST /test/skus/DOC_1
{
  "pId":235,
  "BS":3,
  "color":"red",
  "price":59.00
}
POST /test/skus/DOC_2
{
  "pId":235,
  "BS":2,
  "color":"red",
  "price":29.00
}
POST /test/skus/DOC_3
{
  "pId":235,
  "BS":1,
  "color":"green",
  "price":69.00
}
POST /test/skus/DOC_4
{
  "pId":236,
  "BS":2,
  "color":"blue",
  "price":19.00
}
POST /test/skus/DOC_5
{
  "pId":236,
  "BS":1,
  "color":"red",
  "price":99.00
}
POST /test/skus/DOC_6
{
  "pId":236,
  "BS":3,
  "color":"red",
  "price":39.00
}
POST /test/skus/DOC_7
{
  "pId":237,
  "BS":2,
  "color":"red",
  "price":10.00
}
POST /test/skus/DOC_8
{
  "pId":237,
  "BS":1,
  "color":"blue",
  "price":50.00
}
POST /test/skus/DOC_9
{
  "pId":237,
  "BS":3,
  "color":"green",
  "price":20.00
}

我尝试编写的查询是一个查询,例如搜索红色SKU,按产品进行聚合(使用术语聚合和pId),只保留每个存储桶中最好的SKU然后排序最好的SKU价格的那些桶。

这是我到目前为止所得到的:

GET /test/skus/_search
{
  "size": 0, 
  "query": {
    "term": {
      "color": {
        "value": "red"
      }
    }
  },
  "aggs": {
    "bypId": {
      "terms": {
        "field": "pId",
        "size": 10
      },
      "aggs": {
        "mytophits": {
          "top_hits": {
            "size": 1,
            "sort": ["BS"]
          }
        }
      }
    }
  }
}

我从这里不知道如何对水桶价格进行分类。

我已经做了一些截图,以便更好地解释我想要实现的目标:

screenshot1

screenshot2

screenshot3

screenshot4

screenshot5

更新:仍然卡住了。 答案告诉我,不可能做这样的事情也受到欢迎:)

0 个答案:

没有答案