如何在 elasticsearch 中聚合一个 'non - keyword' 字段?
How to aggregate a 'non - keyword' field in elasticsearch?
我正在尝试编写一个弹性搜索查询,该查询应列出 document.When 中各个字段所持有的所有不同值,这些字段属于关键字类型,术语聚合查询工作正常,我可以看到buckets.But 中列出的值及其计数,当我查询不同的柑橘类水果类型时,我没有得到任何结果,映射如下所示:
{
"vegetables":{
"type": "text",
"fields": {
"keyword" : {
"type" : "keyword",
"ignore_above": 256
}
}
},
"fruits": {
"properties": {
"citrus": {
"properties": {
"orange": {
"type": "long"
},
"lemon": {
"type": "long"
},
"kiwi": {
"type": "long"
}
}
}
}
}
}
我期待的结果是:
"aggregations": {
"distinct_citrusy_fruits"{
"buckets" : [
{
"key":"oranges",
"doc_count": 23
},
{
"key":"lemon",
"doc_count": 21
},
{
"key":"kiwi",
"doc_count": 23
}
]
}
}
当我为 "vegetables" 字段(这是一个关键字类型)进行术语聚合时,我能够获得如上所示的桶。
在这种情况下如何获得不同的计数?另外,我没有更改文档格式的选项。
编辑- 到目前为止,我发现的唯一解决方法是调用映射 api,然后在我的代码中解析嵌套的 JSON 以获取键值,如果有更好的解决方案可以,请在此处添加答案。
我认为您不能查询或 运行 字段名称的聚合,只能查询值。
对于水果,我希望有以下映射:
{
"fruits": {
"properties": {
"citrus": {
"properties": {
"kind": {
"type": "keyword"
},
"count": {
"type": "long"
}
}
}
}
}
}
也许您可以使用 _field_names 字段,其中包含每个具有值的字段名。 (https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-field-names-field.html)
我正在尝试编写一个弹性搜索查询,该查询应列出 document.When 中各个字段所持有的所有不同值,这些字段属于关键字类型,术语聚合查询工作正常,我可以看到buckets.But 中列出的值及其计数,当我查询不同的柑橘类水果类型时,我没有得到任何结果,映射如下所示:
{
"vegetables":{
"type": "text",
"fields": {
"keyword" : {
"type" : "keyword",
"ignore_above": 256
}
}
},
"fruits": {
"properties": {
"citrus": {
"properties": {
"orange": {
"type": "long"
},
"lemon": {
"type": "long"
},
"kiwi": {
"type": "long"
}
}
}
}
}
}
我期待的结果是:
"aggregations": {
"distinct_citrusy_fruits"{
"buckets" : [
{
"key":"oranges",
"doc_count": 23
},
{
"key":"lemon",
"doc_count": 21
},
{
"key":"kiwi",
"doc_count": 23
}
]
}
}
当我为 "vegetables" 字段(这是一个关键字类型)进行术语聚合时,我能够获得如上所示的桶。 在这种情况下如何获得不同的计数?另外,我没有更改文档格式的选项。
编辑- 到目前为止,我发现的唯一解决方法是调用映射 api,然后在我的代码中解析嵌套的 JSON 以获取键值,如果有更好的解决方案可以,请在此处添加答案。
我认为您不能查询或 运行 字段名称的聚合,只能查询值。 对于水果,我希望有以下映射:
{
"fruits": {
"properties": {
"citrus": {
"properties": {
"kind": {
"type": "keyword"
},
"count": {
"type": "long"
}
}
}
}
}
}
也许您可以使用 _field_names 字段,其中包含每个具有值的字段名。 (https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-field-names-field.html)