我正在尝试创建滤色器。返回的颜色通常是正常的,但还有很多其他的颜色。例如,我的结果显示如下:
{ key: "WHITE", doc_count: 300 },
{ key: "OFFWHITE", doc_count: 2 },
{ key: "SUPER WHITE", doc_count: 1 }
我的汇总如下:
aggs: {
Color: {
terms: {
field: 'colors.keyword',
size: 100,
},
},
}
我想将所有包含“白色”的东西组合到一个桶中。与其他顶部颜色相同。这可能吗?
答案 0 :(得分:1)
另一种解决方法是使用.ajax function。此处的过滤器可以是与颜色匹配的filter aggregation。
聚合如下所示:
primary_color
以上内容不需要任何脚本。但是正如Kamal所建议的那样,最好的方法是拥有一个单独的字段,例如{
"name":"BarcodeScannerApp",
"integrations": {
"cordova": {}
},
"type":"angular",
"proxies":[
{
"proxyUrl":"http://localhost:8085"
}
]
}
并对其进行汇总。
答案 1 :(得分:0)
我提出了以下使用Terms Aggregation using Script的查询。
请注意,我仅添加了WHITE
和BLUE
的条件。这是一个简单的,如果您的字符串包含一种颜色作为子字符串,则返回适当的原色/顶部颜色作为键。
您可能必须弄清正在使用的独特的上色,并向脚本中添加条件,以便获得所需的内容。
POST <your_index_name>/_search
{
"size": 0,
"aggs": {
"Color": {
"terms": {
"script": {
"source": """
String st = doc['colors.keyword'].value;
if(st.toLowerCase().contains("white"))
return "WHITE";
else if(st.toLowerCase().contains("blue"))
return "BLUE";
""",
"lang": "painless"
}
}
}
}
}
现在,如果您有很多这样的颜色,那么最好使用一种更好的方法/解决方案,那就是尝试重新添加带有附加字段的文档(将其设置为primary_color
),并确保此值字段将仅包含{/ {1}}之类的原色/顶部色。
这样,您可以在这个新字段上进行汇总(white, blue, green, yellow
,使汇总查询更加高效。
让我知道这是否有帮助!