ElasticSearch聚合 - 排序值

时间:2016-01-08 07:33:27

标签: sorting elasticsearch

在这个示例中,我有一些车辆的面数未知。

在进行聚合时,我希望按字母顺序对聚合中的值进行排序。但是,一些方面是整数,这将产生这些聚合

Color
 blue (2)
 red (1)

Top speed
 100 (1)
 120 (1)
 90 (1)

Year
 2015 (1)

正如您所看到的那样,topspeed facet排序错误 - 应该是第一个。

示例数据

PUT /my_index
{
  "mappings": {
    "product": {
      "properties": {
        "displayname" :{"type": "string"}, 
        "facets": {
          "type": "nested", 
          "properties": {
            "name":     { "type": "string"  },
            "value":    { "type": "string"  },
            "datatype": { "type": "string"  }
          }
        }
      }
    }
  }
}



PUT /my_index/product/1
{
  "displayname": "HONDA",
  "facets": [
    {
      "name": "topspeed",
      "value": "100",
      "datatype": "integer"
    },
    {
      "name": "color",
      "value": "Blue",
      "datatype": "string"
    }
  ]
}

PUT /my_index/product/2
{
  "displayname": "WV",
  "facets": [
    {
      "name": "topspeed",
      "value": "90",
      "datatype": "integer"
    },
    {
      "name": "color",
      "value": "Red",
      "datatype": "string"
    }
  ]
}

PUT /my_index/product/3
{
  "displayname": "FORD",
  "facets": [
    {
      "name": "topspeed",
      "value": "120",
      "datatype": "integer"
    },
    {
      "name": "color",
      "value": "Blue",
      "datatype": "string"
    },
    {
      "name": "year",
      "value": "2015",
      "datatype": "integer"
    }
  ]
}

GET my_index/product/1

GET /my_index/product/_search
{
  "size": 0, 
   "aggs": {
    "facets": {
      "nested": {
        "path": "facets"
      },
      "aggs": {
        "nested_facets": {
          "terms": {
            "field": "facets.name"
          },
          "aggs": {
            "facet_value": {
              "terms": {
                "field": "facets.value",
                "size": 0,
                "order": {
                  "_term": "asc"
                }
              }
            }
          }
        }
      }
    }
  }
}

正如您所看到的,每个facet都有一个数据类型(整数或字符串)。

我有什么想法可以将值排序为:

Color
 blue (2)
 red (1)

Top speed
 90(1)     
 100 (1)
 120 (1)

Year
 2015 (1)

我已经开始在facet“sortable_value”中添加一个新字段,其中我在索引时填充像“00000000090”这样的整数值。但无法使聚合工作。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

这是表示数据的一种罕见方式。

我建议您将数据结构更改为以下内容 { "displayname": "FORD", "facets": { "topspeed": 120, "color": "Blue", "year": 2015 } }