ElasticSearch 聚合 - 排序值
Posted
技术标签:
【中文标题】ElasticSearch 聚合 - 排序值【英文标题】:ElasticSearch aggregations - sorting values 【发布时间】:2016-04-12 19:39:41 【问题描述】:在这个示例中,我有一些带有未知数量刻面的汽车。
在进行聚合时,我希望聚合中的值按字母顺序排序。但是,有些方面是整数,这会产生这些聚合
Color
blue (2)
red (1)
Top speed
100 (1)
120 (1)
90 (1)
Year
2015 (1)
如您所见,最高速度方面的排序错误 - 90 应该排在第一位。
样本数据
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"
如您所见,每个方面都有一个数据类型(整数或字符串)。
任何想法如何让值排序如下:
Color
blue (2)
red (1)
Top speed
90(1)
100 (1)
120 (1)
Year
2015 (1)
我已经尝试在构面“sortable_value”中添加一个新字段,我在索引时填充像“00000000090”这样的整数值。但无法使聚合工作。
感谢任何帮助
【问题讨论】:
【参考方案1】:这是一种不常见的数据表示方式。
我建议将您的数据结构更改为以下
"displayname": "FORD",
"facets":
"topspeed": 120,
"color": "Blue",
"year": 2015
【讨论】:
感谢您的建议。产品目录非常多样化,不同方面(颜色、年份、最高速度)的数量> 1000。主要问题是我们不知道我们可以遇到的方面 那么我建议你在映射中尽可能多地指定类型,其余的留给elasticsearch
。只要您的构面具有不同的名称,我想他们会这样做,elasticsearch
将根据第一个字段值将自动类型分配给以前未出现过的任何新字段。这种自动分配的类型通常是有意义的。
感谢您回复我。我可以轻松地添加具有单独映射的所有方面,包括正确的数据类型。但是我如何才能进行针对我所有方面的聚合呢?以上是关于ElasticSearch 聚合 - 排序值的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:Elasticsearch 中的父级和兄弟级聚合
Elasticsearch:Elasticsearch 中的父级和兄弟级聚合