根据子字段值排序/评分父文档

时间:2017-12-20 09:10:46

标签: elasticsearch spring-data-elasticsearch

Types Description:  parent type
  1)Parent Type: "product"
  2)childType : "ratings"

问题描述:我有一个es查询(query-1)工作正常并从父类型(产品)中获取结果,现在我添加了一个新类型(评级),并且制作了" product"的新型子项,我需要扩展现有的查询,其中新结果应根据匹配的子(评级)类型的字段值进行排序。

查询-1:

{
  "bool" : {
    "must" : [ {
      "has_parent" : {
        "query" : {
          "bool" : {
            "must" : {
              "term" : {
                "searchable" : "true"
              }
            }
          }
        },
        "parent_type" : "supplierparent",
        "inner_hits" : { }
      }
    }, {
      "bool" : {
        "must" : {
          "query" : {
            "simple_query_string" : {
              "query" : "rice"
            }
          }
        }
      }
    }, {
      "nested" : {
        "query" : {
          "term" : {
            "productStatusList.status" : "Approved"
          }
        },
        "path" : "productStatusList"
      }
    } ]
  }
}

1 个答案:

答案 0 :(得分:1)

我认为应该有更好的方法来执行此操作,就像我们对nested文档属性的排序一样。但是,可以使用父子关系进行排序的一种方法是当前类型的属性。

由于它们现在是完全不同的文档存储,因此不可能使用子属性来对父类进行排序。同一个父文档可能有多个子文档,这会在排序结果时产生歧义。