为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 elasticsearch 中聚合“非关键字”字段?

如何在 elasticsearch 中聚合“非关键字”字段?

皈依舞 2022-12-21 10:58:26
我正在尝试编写一个弹性搜索查询,该查询应列出文档中各个字段所持有的所有不同值。当字段的类型为关键字时,术语聚合查询工作正常,我可以看到这些值及其计数列在桶。但是,当我查询不同的柑橘类水果类型时,我没有得到任何结果,映射如下所示:{       "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       }      ]   }}当我为“蔬菜”字段(这是一个关键字类型)进行术语聚合时,我能够获得如上所述的存储桶。在这种情况下如何获得不同的计数?另外,我没有更改文档格式的选项。编辑 - 到目前为止,我发现的唯一解决方法是调用映射 api,然后在我的代码中解析嵌套的 JSON 以获取键值,如果有任何更好的解决方案,请在此处添加答案。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

我认为您不能对字段名称查询或运行聚合,只能对值进行查询或运行聚合。对于水果,我期望以下映射:


{

    "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 )


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号