我无法在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"]
}
}
}
}
}
}
我从这里不知道如何对水桶价格进行分类。
我已经做了一些截图,以便更好地解释我想要实现的目标:
更新:仍然卡住了。 答案告诉我,不可能做这样的事情也受到欢迎:)