我正在尝试编写一个弹性搜索查询,该查询应列出文档中各个字段所持有的所有不同值。当字段的类型为关键字时,术语聚合查询工作正常,我可以看到这些值及其计数列在桶。但是,当我查询不同的柑橘类水果类型时,我没有得到任何结果,映射如下所示:{ "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 )
添加回答
举报
0/150
提交
取消