弹性搜索按单个嵌套文档密钥之一排序

时间:2016-02-24 12:07:40

标签: sorting elasticsearch

我的文档看起来像这样: -

“_ source”:{

      "product_name": "p2",
      "m_p": [
        {
          "m_id": "m2",
          "price": 100
        },
        {
          "m_id": "m4",
          "price": 101
        }
      ]
    }

“_ source”:{

     "product_name": "p1",
      "m_p": [
        {
          "m_id": "m1",
          "price": 50
        },
        {
          "m_id": "m2",
          "price": 55
        },
        {
          "m_id": "m3",
          "price": 55
        },
        {
          "m_id": "m5",
          "price": 65
        }
      ]
    }

现在我需要根据给定(来自外部源)m_id和p_id对的价格对这些进行排序。 例如,外部服务为p1-m2和p2-m4提供 所以查询应该根据p1的价格排序产品为55(m2卖出55),p2的价格为101(m4卖出101)。

1 个答案:

答案 0 :(得分:0)

您需要使用nested sort按存储在嵌套字段中的值进行排序。此外,您可以使用nested_filter字段按照您关注的文档中的字段内容进行排序。

在嵌套过滤器中,您只能过滤嵌套文档的属性,如果要同时按product_name和{{1进行过滤,则必须在每个嵌套文档中存储product_name排序时。

使用这些设置

m_id

并使用此格式索引文档

{
   "mappings": {
      "test": {
         "properties": {
            "m_p": {
               "type": "nested",
               "properties": {
                   "price": {"type": "integer"},
                   "product_name": {"type": "string"},
                   "m_id": {"type": "string"}
               }
            }
         }
      }
   }
}

您可以使用以下查询根据{ "product_name": "p2", "m_p": [ { "m_id": "m2", "product_name": "p2", "price": 100 }, { "m_id": "m4", "product_name": "p2", "price": 101 } ] } product_name

进行排序
m_id