我的弹性搜索索引中有几千个文档。 Document有一些嵌套集合。其中之一是“变体”的嵌套集合。 JSON结构的文件之一是:
{
"id" : 1,
"name": "lollipop",
"model_name": "candy",
"variants": [
{
"id": 1000,
"taste": "orange",
"gross_price": 13,
"stock_quantity": 15
},
{
"id": 1001,
"taste": "apple",
"gross_price": 7,
"stock_quantity": 1
},
{
"id": 1002,
"taste": "bannana",
"gross_price": 9,
"stock_quantity": 13
},
,
{
"id": 1003,
"taste": "pinaple",
"gross_price": 19,
"stock_quantity": 10
},
... and more and more ...
],
... and more and more ...
}
我的商店在一页上只显示了48个产品。 我的索引总共有4800种产品,因此我的商店有100页。
我遇到按价格排序的问题。
在任何页面上,我想获得48个具有最低变种价格的产品,其中stock_quantity大于1.对于最轻的结果 - 我使用的是变体的inner_hits。然后我只有那些符合我条件的变种。
我写了一些elasticsearch查询(第一页):
GET myshop_index/product/_search
{
"from": 0,
"size": 48,
"sort": [
{
"variants.gross_price": {
"mode": "min",
"order": "asc",
"nested_path": "variants"
}
}
],
"_source": {
"excludes": [
"variants"
]
},
"query": {
"bool": {
"filter": [
{
"nested": {
"query": {
"bool": {
"must": [
{
"range": {
"variants.stock_quantity": {
"gt": 1
}
}
}
]
}
},
"path": "variants",
"inner_hits": {
"name": "variants",
"size": 10000
}
}
}
]
}
}
}
}
我的前48种产品都带有他们的变种,但这种分类并没有在我的索引中使用完整的产品变体。这种排序的工作方式如下:
但我需要得到这种情况:
有什么想法吗?
答案 0 :(得分:1)
好的,我解决了我的问题。我找到了Nested Sorting。这对我有用。特别是第5点。 “sort子句中的nested_filter与主查询子句中的嵌套查询相同。接下来解释原因。”并在此之后解释