首页 > 解决方案 > Elasticsearch 嵌套过滤器排序

问题描述

我想按特定的数组字段对我的数据进行排序。

我有产品和类别。一种产品可以有多个类别。产品类别匹配对我的产品进行排序有其自己的优先级。

[{

        "title":"Product 1",
        "categories": [{
                "title": "Category 1",
                "pivot": {
                 "priority": 10
                }
            }, {
                "title": "Category 2",
                "pivot": {
                 "priority": 3
                }
            },{
                "title": "Category 3",
                "pivot": {
                 "priority": 8
                }
            },{
                "title": "Category 4",
                "pivot": {
                 "priority": 2
                }
            }
        ]
    },{
        "title":"Product 2",
        "categories": [{
                "title": "Category 1",
                "pivot": {
                 "priority": 3
                }
            }, {
                "title": "Category 2",
                "pivot": {
                 "priority": 8
                }
            },{
                "title": "Category 3",
                "pivot": {
                 "priority": 2
                }
            },{
                "title": "Category 4",
                "pivot": {
                 "priority": 6
                }
            }
        ]
    }
]

我想按“类别 1”列出我的产品并按优先级对其进行排序。我做了如下查询。(我只在排序内部分享)

{
  "categories.pivot.priority": {
    "order": "asc",
    "nested_path": "categories",
    "nested_filter": {
      "term": {
        "categories.title.keyword": "Category 1"
      } 
  }
}

但是当我成功时,它会返回

[{"type":"query_shard_exception","reason":"[nested] nested object under path [categories] is not of nested 

无法理解它有什么问题。

标签: elasticsearch

解决方案


推荐阅读